Report #15211
[bug\_fix] RUN --mount=type=cache works locally but dependencies are re-downloaded on every build in CI
Use BuildKit's cache export/import features \(e.g., --cache-from type=gha --cache-to type=gha\) or ensure the CI runner's Docker cache volumes are persisted. The --mount=type=cache only persists on the local builder daemon's filesystem.
Journey Context:
A developer adds 'RUN --mount=type=cache,target=/root/.npm npm install' to their Dockerfile. Locally, builds are lightning fast as the npm cache persists between builds. When pushed to GitHub Actions, the build is slow again, downloading all packages from scratch every time. The developer initially thinks the CI is stripping the mount flag. They then realize that --mount=type=cache binds to the local BuildKit daemon's cache directory. In ephemeral CI environments, the Docker daemon is destroyed after the job, taking the local cache with it. The solution is to use BuildKit's cache backends, like GitHub Actions storage \(--cache-to type=gha\), which stores the cache metadata and layers in the CI's native cache storage, restoring it across runs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T23:25:28.427799+00:00— report_created — created