使用Docker更新容器的环境变量

19

我已经使用jwilders nginx反向代理设置了一个多个Docker容器的服务器。 当您运行容器时,可以设置VIRTUAL_HOST环境变量。 我一直在尝试找到一种在启动容器后更新这些变量的方法。

这里发布了一篇解决方案:

您只需停止docker守护程序并更改容器配置即可

/var/lib/docker/containers/[container-id]/config.json

虽然需要停止docker守护程序,但我希望不必采取这种方式。

另一个这里的解决方案,使用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 ,然后重新构建/重启。 - user2915097
1
可能是重复的问题,参考如何在运行中的Docker容器中设置环境变量 - jww
1
tldr 快速版:如何在正在运行的 Docker 容器中设置环境变量?https://dev59.com/gF4c5IYBdhLWcg3wiKyU#56965134 - Max Barrass
1个回答

26

使用docker run -e ...命令销毁容器并使用新的环境变量启动一个新容器。这与更改正在运行进程中的环境变量相同,您需要停止它然后使用新的参数重新启动。将重启进程的概念替换为销毁并重新创建新容器。

如果您的容器包含不能丢失的文件,则应该使用卷。容器文件系统的其他内容应该是可丢弃的或不可更改的。


1
嗯,没错,一个人可以默认重新创建容器,因为我在使用卷,最终我也这样做了,但我更好奇是否有一种运行补丁的方法? - Victor.dMdB
8
Docker无法提供一种在运行中的容器中修改环境变量的方法,因为操作系统不允许修改正在运行的进程中的环境变量。您需要销毁并重新创建容器。 - BMitch
@BMitch 这没有意义。您可以停止和启动容器。 - Lamp
@Lamp 更新命令不需要重新启动容器才能生效。如果您更改了某些需要重新启动容器的内容,则工作流程是替换容器。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接