如何将环境变量导出到docker镜像?

Jel*_*lby 9 docker

我可以在Dockerfile中定义"静态"环境变量ENV,但是可以在构建时将一些值传递给这个变量吗?我正在尝试这样的东西,这不起作用:

FROM phusion/baseimage

RUN mkdir -p /foo/2016/bin && \
    FOOPATH=`ls -d /foo/20*/bin` && \
    export FOOPATH

ENV PATH $PATH:$FOOPATH
Run Code Online (Sandbox Code Playgroud)

当然,在实际用例中,我将运行/解压缩创建一个名称将随不同版本,日期等更改的目录,并且我希望每次目录名称更改时都避免修改Dockerfile.


编辑:由于它似乎不可能,到目前为止最好的解决方法是使用符号链接:

FROM phusion/baseimage

RUN mkdir -p /foo/2016/bin && \
    FOOPATH=`ls -d /foo/20*/bin` && \
    ln -s $FOOPATH /mypath

ENV PATH $PATH:/mypath
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 5

要在构建时传递值,请使用ARG.

FROM phusion/baseimage

RUN mkdir -p /foo/2016/bin && \
    FOOPATH=`ls -d /foo/20*/bin` && \
    export FOOPATH

ARG FOOPATH
ENV PATH $PATH:${FOOPATH}
Run Code Online (Sandbox Code Playgroud)

然后你就可以跑了 docker build --build-arg FOOPATH=/dir -t myimage .


编辑:从你的评论,我上面的答案不会解决你的问题.Dockerfile中没有任何内容可以从run命令的输出中更新,输出不会被解析,只会保存生成的文件系统.为此,我认为您最好在运行命令中编写映像路径并从/ etc/profile或自定义入口点脚本读入.这取决于您希望如何启动容器和基本映像.