2016-07-08 254 views
1

我試圖在泊塢窗圖像中設置我們的生產環境。 花了一些時間編譯軟件後,我意識到我忘了在Dockerfile中設置語言環境變量。Docker中的環境變量

有沒有辦法永久提交環境變量到圖像? 我只是遇到了dockerfile這樣做的方式,我不想從中重建並丟失所有已完成的工作。

.bashrc中設置這些變量不起作用,因爲docker run命令似乎忽略了這些設置。

+0

您_will_必須重建,遲早的事。所以你最好開始自動化配置。 –

+0

您使用的是什麼版本的docker?在哪個操作系統?你使用的是什麼'docker run'選項? – VonC

+0

@VonC我正在使用版本1.11.2。目前我只是附加到容器上,執行apt-get install,手動編譯東西並將更改提交到我的映像中。我仍然在學習如何正確使用docker ... – KahPhi

回答

1

有沒有辦法永久提交環境變量到圖像?

那就是directive ENV in Dockerfile

ENV <key> <value> 
ENV <key>=<value> ... 

但既然你不想重建圖像(雖然你可以在dockerfile結束大部分圖像構建添加它,並benefit from the cache),你仍然可以用docker run -e "variable=value"

啓動你的容器
+0

爲了將其永久添加到我的映像中,似乎唯一的選擇是在dockerfile中使用FROM {my_image}並設置ENV,如此處所述。謝謝 – KahPhi

+0

@KahPhi誠然,你可以從你現有的圖像中建立一個新的圖像。 – VonC

0

您可以在「docker commit」操作期間更改環境變量以修改現有圖像。請參閱https://docs.docker.com/engine/reference/commandline/commit/和此StackOverflow問題答:Docker Commit Created Images and ENTRYPOINT - 並參考sxc731的答案。我不清楚如何設置多個Env變量,但它可能需要單獨更改 - 每個變量。

這裏是什麼,我只是在做(bash shell中)的例子:

docker run -it --entrypoint /bin/bash $origimghash 
# make changes, leave running, then in another shell: 
EP='ENTRYPOINT ["python","/tmp/deploy/deploy.py"]' 
ENV='Env no_proxy "*.local, 169.254/16"' 
docker commit "--change=$ENV" "--change=$EP" $runninghash me/myimg 
docker inspect -f "{{ .Config.Env }}" $newhash