工作目录相对路径

输出

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 .