Docker中的环境变量

时间:2016-07-08 08:12:57

标签: docker

我正在尝试在docker镜像中设置我们的生产环境。 在花了几个小时编译软件后,我意识到我忘了在Dockerfile中设置语言环境变量。

有没有办法将环境变量永久地提交给图像? 我只是遇到了dockerfile这样做的方式,我不想从中重建并丢失已经完成的所有工作。

.bashrc中设置这些变量不起作用,因为docker run命令似乎绕过了这些设置。

2 个答案:

答案 0 :(得分:1)

  

有没有办法将环境变量永久提交给图像?

那是directive ENV in Dockerfile

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

但是,既然您不想重建图像(尽管您可以在dockerfile的末尾添加它,并且benefit from the cache用于大部分图像构建),您仍然可以启动容器docker run -e "variable=value"

答案 1 :(得分:0)

您可以在“docker commit”操作期间更改环境变量以修改现有图像。请参阅https://docs.docker.com/engine/reference/commandline/commit/和此StackOverflow Q&amp; A: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