Search code examples
dockerfiledocker-multi-stage-build

Docker multi-stage builds: how to set WORKDIR globally for every stage?


I have many stages in my Dockerfile. Now in every stage I have copy/pasted #WORKDIR $PYSETUP_PATH:

FROM base as buidler
WORKDIR $PYSETUP_PATH

FROM buidler as test
WORKDIR $PYSETUP_PATH

FROM buidler as deploy
WORKDIR $PYSETUP_PATH

How can I reduce this boilerplate code and set WORKDIR only once globally?

What I want:

WORKDIR = $MY_DEFAULT_WORDIR  # Set globally for every stage


FROM base as buidler


FROM buidler as test


FROM buidler as deploy

Solution

  • A FROM line inherits almost all of the settings from its base image, including its WORKDIR. Since your later stages derive from the first stage you only need to include WORKDIR in the base stage.

    FROM base AS builder
    WORKDIR /app
    
    FROM builder AS test
    # already in /app directory
    
    FROM builder AS deploy
    # already in /app directory