我可以使用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
答案 0 :(得分:5)
要在构建时传递值,请使用Reference Manual。
FROM phusion/baseimage
RUN mkdir -p /foo/2016/bin && \
FOOPATH=`ls -d /foo/20*/bin` && \
export FOOPATH
ARG FOOPATH
ENV PATH $PATH:${FOOPATH}
然后您可以运行docker build --build-arg FOOPATH=/dir -t myimage .
编辑:从您发表评论,我上面的回答不会解决您的问题。 Dockerfile中没有任何内容可以从run命令的输出中更新,输出不会被解析,只保存生成的文件系统。为此,我认为您最好在运行命令中编写映像路径并从/ etc / profile或自定义入口点脚本读入。这取决于您想要如何启动容器和基本映像。