2016-07-26 949 views
2

我已经设置了一个服务器,其中包含多个Docker容器,可通过jwilders nginx reversre proxy访问。当你运行容器时,你可以设置VIRTUAL_HOST环境变量。我一直在试图找出在容器启动后更新这些方法。Docker - 更新容器的环境变量

一个解决方案发布here

你只停留在

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

需要你码头工人守护进程,并改变容器配置停止泊坞窗守护,但我宁愿不不得不诉诸于此。

另一个here,使用搬运工承诺保留实例信息:

说了这么多,你-can-保存在 容器文件系统的变化,通过提交一个新的形象;

$ docker run -it --name=foobar alpine sh 
$ docker commit foobar mynewimage 
$ docker rm foobar 
$ docker run -it --name=foobar mynewimage sh 

虽然这似乎也有点洁癖只是改变一个环境变量。

我查看了docker update,但主要是重新配置容器资源。

当然,如果我没有其他选择,我会使用上述任一方法,但我想知道是否有人找到了其他解决方案?

+0

我认为这是更好更新Dockerfile,一些'ENV ABC 123'或'ENV ABC = 123高清= 456'和重建/重启 – user2915097

回答

5

销毁您的容器并使用docker run -e ...使用新环境变量启动新容器。这与更改正在运行的进程的环境变量相同,您停止它并使用传入的新值重新启动。替换重新启动进程的概念,同时销毁并重新创建新的容器。

如果您的容器包含无法丢失的文件,那么您应该使用卷。容器文件系统的其他内容应该是一次性的或不可变的。

+0

嗯,是的,真正的,人们可以默认回到重建的容器,自从我使用音量以来,我最终做到了,但是如果有办法将其作为一种运行修补程序,我会更加好奇吗? –

+1

Docker没有提供修改正在运行的容器中的环境变量的方法,因为操作系统没有提供修改正在运行的进程中的环境变量的方法。你需要销毁并重新创建。 – BMitch