【问题标题】:difference between RUN cd and WORKDIR in DockerfileDockerfile 中 RUN cd 和 WORKDIR 的区别
【发布时间】:2020-03-09 20:36:39
【问题描述】:

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

【问题讨论】:

  • "是说WORKDIR /给了我错误":什么错误?
  • 这可能取决于您的基础 Docker 映像和 Dockerfile 的其他部分。例如,我有FROM ubuntu:18.04WORKDIR /,它工作正常。您需要帮助我们重现您的问题。
  • 好的,谢谢...它是另一台服务器的一部分,它有点复杂,但我不知道为什么 cd / 有效,但 WORKDIR / 会导致奇怪的错误。我编辑了我的问题。

标签: bash docker


【解决方案1】:

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

每个RUN 命令都在一个新的shell 和一个新的环境中运行(从技术上讲,是一个新的容器,尽管您通常不会注意到这一点)。之前的ENVWORKDIR 指令会影响它的启动方式。如果您有一个仅更改目录的 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 export 不会做任何超出当前 Dockerfile 指令的操作,RUN . 或非标准的RUN source 不会导致设置环境变量。)

【讨论】:

  • 什么都不做到后续的RUNs,而不是当前的。
猜你喜欢
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2017-12-06
  • 2012-08-16
相关资源
最近更新 更多