工作目录相对路径

输出

Relative workdir 'app/src' can have unexpected results if the base image changes

描述

在构建阶段指定 WORKDIR 时,您可以使用绝对路径,例如 /build,或相对路径,例如 ./build。使用相对路径意味着 工作目录相对于之前的工作目录。 因此,如果您的基础镜像使用 /usr/local/foo 作为工作目录,并且 您指定了一个相对目录,例如 WORKDIR build,则有效工作 目录变为 /usr/local/foo/build

WorkdirRelativePath 构建规则会在你使用带有相对路径的 WORKDIR 且未在同一 Dockerfile 中先指定绝对路径时发出警告。 该规则的理由是,为外部构建的基础镜像使用相对工作目录很容易出错,因为工作目录可能会在无预警的情况下在上游发生变更,从而导致你的构建目录层级完全不同。

示例

❌ 错误:这假设基础镜像中的 WORKDIR/ (如果上游发生变化,web 阶段就会出错)。

FROM nginx AS web
WORKDIR usr/share/nginx/html
COPY public .

✅ 很好:前导斜杠确保 WORKDIR 总是最终位于所需的路径。

FROM nginx AS web
WORKDIR /usr/share/nginx/html
COPY public .