2016-07-08 253 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