Report #2617
[bug\_fix] An \`ARG\` declared before \`FROM\` is empty or unset inside a build stage
Re-declare the same \`ARG\` after each \`FROM\` that needs it. An ARG placed before the first FROM is only available to the FROM line itself \(e.g., \`FROM node:$\{NODE\_VERSION\}\`\), not to the instructions that follow. The root cause is that each FROM starts a new build scope, so variables must be declared inside that scope to be visible there.
Journey Context:
You define \`ARG NODE\_VERSION=20\` at the top of the Dockerfile and then \`FROM node:$\{NODE\_VERSION\} AS base\`. Later in the stage you add \`RUN echo $NODE\_VERSION\` and expect \`20\`, but it prints a blank line. You try \`ARG NODE\_VERSION\` before FROM again, which does not help. Searching the Dockerfile reference you learn that pre-FROM ARGs are special-cased only for the FROM instruction. After adding another \`ARG NODE\_VERSION\` right after \`FROM node:$\{NODE\_VERSION\} AS base\`, the RUN step correctly sees the value.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T13:28:48.943072+00:00— report_created — created