Report #6009
[bug\_fix] COPY --from=0 fails or copies unexpected files after adding a new build stage
Name the build stages explicitly \(e.g., \`FROM node:18 AS builder\`\) and reference them by name \(\`COPY --from=builder\`\) instead of using integer indices.
Journey Context:
A developer has a multi-stage Dockerfile starting with \`FROM golang:1.20\` \(stage 0\) and \`FROM alpine\` \(stage 1\). The final stage uses \`COPY --from=0 /app /app\`. Later, they add a linting stage at the very top: \`FROM golang:1.20 AS lint\`. Suddenly, the build fails because \`COPY --from=0\` now points to the lint stage, which never compiled the binary. The binary is now in stage 1. They fix the immediate error by changing the index to 1, but realize this is fragile. The established fix is to use named stages. By changing the builder stage to \`FROM golang:1.20 AS builder\` and using \`COPY --from=builder\`, the Dockerfile becomes resilient to stage reordering, completely eliminating index tracking errors.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T22:51:40.545611+00:00— report_created — created