我正在查看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
。
答案 0 :(得分:0)
每个RUN
(当不在显式argv使用模式下时)启动一个新的shell,它必须在RUN命令完成之前退出。那个壳只能改变自己的环境和它的孩子的环境;它不能改变退出后开始的其他程序的环境。
相比之下,ENV
控制着Docker在启动时传递给未来进程的环境。
因此,您可以将ENV
移到RUN
之上并从RUN
中删除导出(以便在启动shell之前正确设置PATH),但是您可以&# 39;让RUN
完成ENV
的工作。