1

这些是 Dockerfile 的前 2 行:

FROM node:12
WORKDIR /code

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

4

3 回答 3

5

Dockerfile指令_WORKDIR

... 设置工作目录.... 如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也会被创建。

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

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

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

host$ docker build -t my-image .
host$ docker run --rm my-image ls -l /
host$ docker run --rm -it my-image /bin/sh
0123456789ab# ls -l /
0123456789ab# exit

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

于 2021-08-17T12:20:58.630 回答
2

Workdir /code 将在容器内创建。

要对此进行测试,您可以sh在容器中进行。

脚步:

docker exec -it <container-id> sh

ls (Here you will see WORKDIR)

如果您想从自定义图像中查看中间图像层

泊坞窗图像检查 <图像名称>

于 2021-08-17T12:07:23.530 回答
0

WORKDIR如果未指定,则默认的driectory 是/目录。

以下链接中的更多信息, https://www.geeksforgeeks.org/docker-workdir-instruction/

于 2021-08-17T12:19:10.807 回答