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

时间:2016-12-24 18:08:01

标签: docker

我可以使用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

1 个答案:

答案 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或自定义入口点脚本读入。这取决于您想要如何启动容器和基本映像。