Report #44122
[bug\_fix] \`COPY --from=0\` copies the wrong files or fails after adding a new stage to the Dockerfile.
Use named stages \(e.g., \`FROM node:18 AS builder\`\) and reference them by name in \`COPY --from=builder\` instead of using integer indices.
Journey Context:
A developer has a working multi-stage build that uses \`FROM golang:1.20 AS base\`, \`FROM base AS builder\`, and \`FROM alpine:3.18\`. They decide to add a linting stage at the top: \`FROM golangci/golangci-lint AS linter\`. Suddenly, the final stage fails with \`COPY --from=1 /app/server /server\` not finding the file. They realize that by adding a stage at the top, the implicit integer indices \(\`0\`, \`1\`, \`2\`\) assigned to the stages shifted. The \`builder\` stage moved from index 1 to index 2. The fix is to abandon integer indices entirely, which are fragile and hard to read, and explicitly name the stages using \`AS \`. They change the copy command to \`COPY --from=builder /app/server /server\`, making the Dockerfile resilient to stage reordering.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:31:56.903267+00:00— report_created — created