概述

在本教程中,我们将学习 Dockerfile 中的 WORKDIR 指令。我们将讨论它所执行的操作、默认值以及如何在 Dockerfile 中使用它。我们还将讨论在创建 Dockerfile 时其的重要性。

1. WORKDIR 指令概述

Dockerfile 中的 WORKDIR 指令设置后续指令在 Dockerfile 中的当前工作目录。当执行 WORKDIR 指令时,Dockerfile 中的所有后续指令都将相对于指定的目录执行。

例如,如果 WORKDIR 指令设置为 /app,那么所有后续指令将相对于 /app 目录执行。WORKDIR 指令在 Docker 图像中切换到特定目录,如应用程序代码目录,以使后续指令更容易引用文件。

值得注意的是,WORKDIR 指令仅设置 Dockerfile 中后续指令的当前工作目录。如果 WORKDIR 指令使用根目录(*/*)的默认值,并且 Dockerfile 中没有后续指令,则它不会对当前工作目录产生任何影响。

2. WORKDIR 指令是什么

Dockerfile 中的 WORKDIR 指令设置 Dockerfile 中后续指令的当前工作目录。当执行 WORKDIR 指令时,Dockerfile 中的所有后续指令都将相对于指定的目录执行。例如,如果 WORKDIR 指令设置为 /app,那么所有后续指令将相对于 /app 目录执行。这使得在后续指令中更容易引用文件。

重要的是要注意,WORKDIR 指令仅设置 Dockerfile 中后续指令的当前工作目录。如果 WORKDIR 指令使用根目录(*/*)的默认值,并且 Dockerfile 中没有后续指令,那么它将不会对当前工作目录产生任何影响。

3. WORKDIR 的默认值

如果 Dockerfile 中未指定 WORKDIR 指令,其默认 WORKDIR 是根目录(*/*)。换句话说,如果 Dockerfile 中没有 WORKDIR 指令,则所有后续指令将执行相对于根目录。然而,我们可以通过在 WORKDIR 指令中指定不同的目录来覆盖此默认值。

请注意,无论 Docker 图像如何,WORKDIR 指令的默认值始终是根目录(*/*)。

WORKDIR 指令的默认值可能会影响依赖于工作目录的命令的行为。例如,在 Dockerfile 中有一个使用 cd 命令更改到特定目录的命令。现在,如果我们不指定 WORKDIR 指令,那么 Dockerfile 将使用默认值 “*/”。现在,cd* 命令将尝试更改到 Dockerfile 文件系统根目录中的那个目录。如果根目录中不存在该目录,则命令将失败。

4. 更改 WORKDIR

在 Docker 中,我们还可以更改容器的工作目录。我们可以通过指定 WORKDIR 指令来为 CMD/ENTRYPOINT 指令中指定的命令设置工作目录。让我们看看在 Dockerfile 中使用 WORKDIR

FROM centos 
WORKDIR /home
ENTRYPOINT ["sh", "-c", "pwd"]

在这种情况下,WORKDIR 指令将工作目录设置为 /homeENTRYPOINT 指令指定在 /home 目录中执行 pwd 命令。

或者,我们也可以在运行 Docker 容器时使用 -w 或 --workdir 选项来指定工作目录:

$ docker run -w /home centos:latest sh -c "pwd"

这个 Docker 运行命令将在容器内的 /home 目录中执行 pwd 命令。

5. 结论

在本文中,我们发现 WORKDIR 指令的默认值是 “*/”。WORKDIR* 指令在 Docker 图像之间切换不同的目录。我们可以通过为 WORKDIR 指令指定自定义值来覆盖它。