Docker WORKDIR - 在我的机器上还是容器上?

jsa*_*our 6 docker dockerfile

WORKDIRDockerfile中的关键字指的是什么上下文?是在我docker build从我生产的容器内运行还是在我生产的容器内运行?

我发现自己经常放入RUN cd && ...我的 docker 文件,并希望有另一种方式,我觉得我错过了一些东西。

小智 6

它在容器内。

取自 Dockerfile 参考站点https://docs.docker.com/engine/reference/builder/#workdir

WORKDIR 指令为 Dockerfile 中跟随它的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。如果 WORKDIR 不存在,即使它没有在任何后续 Dockerfile 指令中使用,它也会被创建。

因此,RUN cd && ...您可以执行以下操作而不是添加:

WORKDIR /path/to/dir
RUN command
Run Code Online (Sandbox Code Playgroud)

  • “WORKDIR 指令为 Dockerfile 中跟随的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。” 实际上并不指定 WORKDIR 路径是在本地计算机上还是在容器中。对于初学者来说,这个文档 100% 含糊不清。另一个答案说“Dockerfile 中的所有路径,除了 COPY 和 ADD 指令的前半部分,都引用图像文件系统路径。” 这是提出这些问题的初学者所不具备的重要信息。 (3认同)

Dav*_*aze 5

Dockerfile 中的所有COPY路径(除了和ADD指令的前半部分)均指的是镜像文件系统路径。COPY和 的源路径是相对于构建上下文(文件末尾的目录)的ADD相对路径(即使它们以 开头)/docker build,通常是包含 Dockerfile 的目录)的相对路径(即使它们以 开头)。Dockerfile 中的任何内容都不能引用主机上的绝对路径或构建上下文树之外的内容。

这两个 Dockerfile 之间的唯一区别是第二个命令启动的目录。

RUN cd /dir && command1
RUN command2
Run Code Online (Sandbox Code Playgroud)
WORKDIR /dir
RUN command1
RUN command2
Run Code Online (Sandbox Code Playgroud)