2016-07-26 152 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