Report #96308
[gotcha] Docker BuildKit cache mounts owned by root cause permission denied for non-root users
Explicitly specify \`uid\` and \`gid\` in the cache mount options: \`--mount=type=cache,target=/cache,uid=1000,gid=1000\` to match the \`USER\` directive in the Dockerfile.
Journey Context:
BuildKit cache mounts persist directories between builds for package managers \(npm, pip, apt\). By default, these directories are created with root:root ownership \(uid 0\) regardless of the \`USER\` instruction in the Dockerfile. When the build switches to a non-root user \(e.g., \`USER appuser\`\), subsequent commands accessing the cache \(e.g., \`npm install\`\) fail with 'EACCES: permission denied'. BuildKit 0.11.0 introduced \`uid\` and \`gid\` mount options to set ownership at mount time. Without these, developers must resort to \`chown\` in the Dockerfile, which invalidates the cache layer or requires root privileges in the container.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T20:14:13.620565+00:00— report_created — created