使用 Docker 更新容器的环境变量
Posted
技术标签:
【中文标题】使用 Docker 更新容器的环境变量【英文标题】:Updating Environment Variables of a Container using Docker 【发布时间】:2016-11-29 23:24:47 【问题描述】:我设置了一个带有多个 docker 容器的服务器,可以通过 jwilders nginx reversre proxy 访问。当您运行容器时,您可以设置 VIRTUAL_HOST 环境变量。我一直在想办法在容器启动后更新这些内容。
here 发布的解决方案:
您只需停止 docker daemon 并更改容器配置
/var/lib/docker/containers/[container-id]/config.json
要求您停止 docker 守护进程,但我不希望这样做。
另一个here,使用docker commit来保存实例信息:
话虽如此,您 - 可以 - 将文件系统更改保留在 容器,通过将其作为新图像提交;
$ docker run -it --name=foobar alpine sh $ docker commit foobar mynewimage $ docker rm foobar $ docker run -it --name=foobar mynewimage sh
虽然这对于仅仅改变一个环境变量来说似乎也有点过头了。
我看过docker update,但那主要是为了重新配置容器资源。
当然,如果我别无选择,我会使用上述任何一种方法,但我想知道是否有人找到了其他解决方案?
【问题讨论】:
我认为最好更新一个 Dockerfile,使用一些ENV abc 123
或 ENV abc=123 def=456
并重新构建/重新启动
How to set an environment variable in a running docker container的可能重复
tldr 快捷方式***.com/questions/27812548/…
【参考方案1】:
销毁您的容器并使用docker run -e ...
使用新环境变量启动一个新容器。这与在正在运行的进程上更改环境变量相同,您将其停止并使用传入的新值重新启动。将重新启动进程的概念替换为销毁并重新创建新容器。
如果您的容器包含不能丢失的文件,那么您应该使用卷。容器文件系统的其他内容应该是一次性的或不可变的。
【讨论】:
嗯,是的,是的,可以默认重新创建容器,我最终还是这样做了,因为我使用的是卷,但我更好奇是否有办法这样做一种运行补丁? Docker 没有提供在运行容器中修改环境变量的方法,因为操作系统没有提供在运行进程中修改环境变量的方法。您需要销毁并重新创建。 @BMitch 这没有意义。您可以停止和启动容器。 @Lamp 更新命令不需要重启容器即可生效。如果您更改需要重新启动容器的内容,则工作流程是替换容器。以上是关于使用 Docker 更新容器的环境变量的主要内容,如果未能解决你的问题,请参考以下文章