工作目录相对路径

输出

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

如果在一个Dockerfile中,你在没有首先指定绝对路径的情况下使用了带有相对路径的WORKDIRWorkdirRelativePath构建规则会警告你。这条规则的原理是,对于外部构建的基础镜像,使用相对工作目录容易导致问题,因为上游可能会在没有警告的情况下更改工作目录,从而导致构建的目录层次结构完全不同。

示例

❌ 错误:这假设基础镜像中的 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 .