Report #75474
[bug\_fix] Permission denied when writing to a BuildKit cache mount directory \(--mount=type=cache\)
Specify the UID and GID of the non-root user in the cache mount instruction, e.g., --mount=type=cache,target=/root/.cache,uid=1000,gid=1000, or ensure the target directory is chowned before the mount is attached.
Journey Context:
To speed up CI, a developer adds a BuildKit cache mount for pip or npm packages using --mount=type=cache,target=/root/.cache. The build works initially when running as root. Later, following security best practices, they add a non-root USER app directive to the Dockerfile. Suddenly, the package installation step fails with a 'Permission denied' error writing to the cache directory. They are baffled because they added a RUN mkdir and chown for the directory before the mount. The rabbit hole deepens until they realize that cache mounts persist across builds and are initialized with the UID/GID of the first process that wrote to them. Since the cache was populated as root in a previous build, the non-root user is blocked. Adding uid and gid parameters to the mount instruction tells BuildKit to mount the cache with the correct ownership for the non-root user.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:16:36.485108+00:00— report_created — created