Report #4426
[bug\_fix] ARG value defined before FROM is undefined inside a build stage
Re-declare the ARG inside each stage that needs it, after the FROM instruction: \`ARG NODE\_VERSION=20\` before FROM, then \`FROM node:$\{NODE\_VERSION\} AS base\` and \`ARG NODE\_VERSION\` inside \`base\` if you need to reference it there.
Journey Context:
A developer defines \`ARG APP\_VERSION=1.0.0\` at the top of the Dockerfile and then writes \`FROM node:20-alpine AS app\` followed by \`RUN echo $APP\_VERSION > /app/version.txt\`. The echo prints a blank. They expected the top-level ARG to be global because it is declared before any FROM. After reading the Dockerfile reference they learn that ARGs declared before the first FROM are only available to FROM instructions themselves; each build stage is a separate scope. To use \`APP\_VERSION\` inside a stage, they must re-declare \`ARG APP\_VERSION\` after the FROM line. They make that change and the version file is populated correctly. They also note that ARGs declared inside a stage do not leak into subsequent stages unless re-declared there.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:28:34.070121+00:00— report_created — created