WORKDIR 是否创建目录?

you*_*tch 12 image docker dockerfile workdir

这些是 Dockerfile 的前两行:

FROM node:12
WORKDIR /code
Run Code Online (Sandbox Code Playgroud)

这里有一些我不明白的事情:从docker的文档中我知道第二行将工作目录设置为/code。这个过程发生在哪里?当 docker 在创建镜像时运行 Dockerfile 的第二行时,会发生这种情况吗?如果/code不存在,它是由docker创建的吗?/code 将在哪里创建?在图像的根目录中?

Dav*_*aze 17

Dockerfile指令WORKDIR

\n
\n

...设置工作目录...如果WORKDIR不存在\xe2\x80\x99t,即使它\xe2\x80\x99s未在任何后续指令中使用,也会创建它Dockerfile

\n
\n

RUN mkdir我偶尔会在切换到目录之前看到一些问题WORKDIR。由于WORKDIR将创建目录,因此这不是必需的。

\n

Dockerfile 中的所有路径始终位于映像内,但COPYADD指令的源路径除外,它们位于主机上的构建上下文目录内。绝对路径/code将直接位于图像中的根目录内,遵循正常的 Unix 约定。

\n

即使 Dockerfile 尚未完成,您也可以从映像中运行临时容器来检查这一点。

\n
host$ docker build -t my-image .\nhost$ docker run --rm my-image ls -l /\nhost$ docker run --rm -it my-image /bin/sh\n0123456789ab# ls -l /\n0123456789ab# exit\n
Run Code Online (Sandbox Code Playgroud)\n

(假设镜像包含诸如sh和 之类的核心工具,这将始终有效lsdocker exec需要首先运行容器;当您正在完善 Dockerfile 时,这可能还不可能。)

\n