如何将环境变量导出到docker映像?
我可以用如何将环境变量导出到docker映像?,docker,Docker,我可以用ENV在Dockerfile中定义“静态”环境变量,但是否可以在构建时向该变量传递一些值?我正在尝试这样的事情,但不起作用: FROM phusion/baseimage RUN mkdir -p /foo/2016/bin && \ FOOPATH=`ls -d /foo/20*/bin` && \ export FOOPATH ENV PATH $PATH:$FOOPATH 当然,在实际的用例中,我会运行/解包一些东西,创建一个目
ENV
在Dockerfile中定义“静态”环境变量,但是否可以在构建时向该变量传递一些值?我正在尝试这样的事情,但不起作用:
FROM phusion/baseimage
RUN mkdir -p /foo/2016/bin && \
FOOPATH=`ls -d /foo/20*/bin` && \
export FOOPATH
ENV PATH $PATH:$FOOPATH
当然,在实际的用例中,我会运行/解包一些东西,创建一个目录,其名称将随着不同的版本、日期等而改变,我希望避免每次目录名称改变时都修改Dockerfile
编辑:由于似乎不可能,目前最好的解决方法是使用符号链接:
FROM phusion/baseimage
RUN mkdir -p /foo/2016/bin && \
FOOPATH=`ls -d /foo/20*/bin` && \
ln -s $FOOPATH /mypath
ENV PATH $PATH:/mypath
要在生成时传入值,请使用 然后可以运行
docker build--build arg FOOPATH=/dir-t myimage。
编辑:从你的评论来看,我上面的回答并不能解决你的问题。Dockerfile中没有任何内容可以通过run命令的输出进行更新,输出不会被解析,只保存生成的文件系统。为此,我认为最好使用run命令编写图像路径,并从/etc/profile或自定义入口点脚本中读取。这取决于您希望如何启动容器和基本映像。我是否正确理解,与
ARG
和--build ARG
一起使用的FOOPATH
与RUN
命令中的完全无关?那对我来说就不是解决办法了。我想导出在RUN
中发生的某些事情的结果,我事先并不完全知道。事实上,我没有注意到您正在尝试使用RUN命令的输出。我已经更新了我的答案。
FROM phusion/baseimage
RUN mkdir -p /foo/2016/bin && \
FOOPATH=`ls -d /foo/20*/bin` && \
export FOOPATH
ARG FOOPATH
ENV PATH $PATH:${FOOPATH}