WorkdirRelativePath
Output
Relative workdir 'app/src' can have unexpected results if the base image changes
Description
When specifying WORKDIR
in a build stage, you can use an absolute path, like
/build
, or a relative path, like ./build
. Using a relative path means that
the working directory is relative to whatever the previous working directory
was. So if your base image uses /usr/local/foo
as a working directory, and
you specify a relative directory like WORKDIR build
, the effective working
directory becomes /usr/local/foo/build
.
The WorkdirRelativePath
build rule warns you if you use a WORKDIR
with a
relative path without first specifying an absolute path in the same Dockerfile.
The rationale for this rule is that using a relative working directory for base
image built externally is prone to breaking, since working directory may change
upstream without warning, resulting in a completely different directory
hierarchy for your build.
Examples
❌ Bad: this assumes that WORKDIR
in the base image is /
(if that changes upstream, the web
stage is broken).
FROM nginx AS web
WORKDIR usr/share/nginx/html
COPY public .
✅ Good: a leading slash ensures that WORKDIR
always ends up at the desired path.
FROM nginx AS web
WORKDIR /usr/share/nginx/html
COPY public .