Report #98684
[bug\_fix] ARG variable is empty in RUN instructions even though it is defined at the top of the Dockerfile
Declare the ARG a second time, without a value, inside each build stage that needs it: \`ARG VERSION=20\` before \`FROM\`, then \`FROM node:$\{VERSION\} AS builder\`, then \`ARG VERSION\` inside the stage, after which RUN/ENV can use \`$VERSION\`.
Journey Context:
A developer wants a configurable Node base image and writes \`ARG NODE\_VERSION=20\`, \`FROM node:$\{NODE\_VERSION\}\`, \`RUN echo $NODE\_VERSION > /node-version\`. The echo prints an empty string. They expect the top-level ARG to behave like a global variable, but Dockerfile ARGs are scoped. An ARG before the first FROM lives only in the global scope and is consumed by FROM lines; it is not inherited into any build stage. The fix is to consume the global ARG inside the stage with a bare \`ARG NODE\_VERSION\` declaration after FROM. This reintroduces the variable into that stage \(and any stage based on it\). The behavior is documented in the Dockerfile reference under ARG/FROM interaction.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-28T04:36:26.100913+00:00— report_created — created