Report #12615
[bug\_fix] Permissions or ownership errors \(e.g., 'permission denied' or files owned by root instead of the expected user\) when using COPY --link
Remove the \`--link\` flag from the \`COPY\` instruction if the copied files depend on the state of previous layers \(such as a \`RUN useradd\` or \`RUN mkdir\` command\), or explicitly recreate that state. \`--link\` creates a completely independent layer that does not inherit the filesystem state of previous layers.
Journey Context:
A developer sees the \`COPY --link\` flag in the Docker documentation, which promises better caching and parallel layer execution. They add it to their Dockerfile: \`RUN useradd appuser\` followed by \`COPY --link --chown=appuser . /app\`. The build fails with permission errors, or the files end up owned by root despite the \`--chown\` flag. They debug by checking the user creation and \`--chown\` syntax. The root cause is that \`--link\` fundamentally changes how \`COPY\` works: it creates a new, independent layer chain, effectively ignoring all previous layers \(including the \`useradd\` step\). Because the base state for the \`COPY --link\` layer doesn't contain \`appuser\`, the \`--chown\` fails or behaves unexpectedly. Removing \`--link\` restores the sequential layer dependency, allowing the \`COPY\` to see the \`appuser\` created in the previous step.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T16:26:43.145098+00:00— report_created — created