为什么这个Dockerfile既具有ENV又具有相同PATH的导出?

时间:2018-05-22 19:11:20

标签: bash sh dockerfile

我正在查看MSDN(截至今天),并且无法理解为什么PATH变量在两个不同的地方使用。这是相关代码段的文件底部:

RUN set -eux; \
    # some code ...
    export PATH="/usr/local/go/bin:$PATH"; \
    go version

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
WORKDIR $GOPATH

的目的是什么?

export PATH="/usr/local/go/bin:$PATH";

ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

分别?

我的印象是ENV指令应该缩短为ENV $GOPATH:$PATH,因为/usr/local/go/bin已经在$PATH

1 个答案:

答案 0 :(得分:0)

每个RUN(当不在显式argv使用模式下时)启动一个新的shell,它必须在RUN命令完成之前退出。那个壳只能改变自己的环境和它的孩子的环境;它不能改变退出后开始的其他程序的环境。

相比之下,ENV控制着Docker在启动时传递给未来进程的环境。

因此,您可以将ENV移到RUN之上并从RUN中删除导出(以便在启动shell之前正确设置PATH),但是您可以&# 39;让RUN完成ENV的工作。