Dockerfile 中 RUN cd 和 WORKDIR 的区别

Hos*_*ein 16 bash docker

就 Docker 的工作方式而言,Dockerfile之间RUN cd /WORKDIR /内部有什么区别吗?

Dav*_*aze 29

RUN cd /什么都不做。 WORKDIR /为将来的命令更改工作目录。

每个RUN命令都在一个新的 shell 和一个新的环境中运行(技术上讲是一个新的容器,尽管您通常不会注意到这一点)。它之前的ENVandWORKDIR指令会影响它的启动方式。如果您有一个RUN只是更改目录的步骤,那么在 shell 退出时该步骤将丢失,下一步将从最新WORKDIR的映像开始。

FROM busybox
WORKDIR /tmp
RUN pwd       # /tmp

RUN cd /      # no effect, resets after end of RUN line
RUN pwd       # still /tmp

WORKDIR /
RUN pwd       # /

RUN cd /tmp && pwd  # /tmp
RUN pwd       # /
Run Code Online (Sandbox Code Playgroud)

(出于同样的原因,RUN export不会做任何比当前 Dockerfile 指令寿命更长的事情,RUN .或者非标准RUN source不会导致设置环境变量。)

  • “_绝对什么都不做_”**针对后续的`RUN`,而不是当前的。** (2认同)