我正在尝试在docker镜像中设置我们的生产环境。 在花了几个小时编译软件后,我意识到我忘了在Dockerfile中设置语言环境变量。
有没有办法将环境变量永久地提交给图像? 我只是遇到了dockerfile这样做的方式,我不想从中重建并丢失已经完成的所有工作。
在.bashrc
中设置这些变量不起作用,因为docker run命令似乎绕过了这些设置。
答案 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