使用 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 123ENV 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 更新容器的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

怎样获取docker容器的环境变量

Docker容器环境变量设置与查看

从 Docker 容器中获取环境变量

Elastic Beanstalk 多容器 Docker 环境变量

dockerfile 容器添加 环境变量

如何持久化docker中的环境变量