Report #85921
[bug\_fix] BuildKit cache mount \(type=cache\) is empty on subsequent builds, forcing re-downloads of packages
Ensure the target path in the --mount=type=cache,target=... instruction exactly matches the actual cache directory used by the package manager inside the container, and verify that builds are using the same BuildKit builder instance.
Journey Context:
A developer implements RUN --mount=type=cache,target=/root/.npm npm install to cache NPM packages. On the next build, despite changing no dependencies, NPM re-downloads everything from the internet. They debug by checking BuildKit logs and trying different cache IDs. The issue turns out to be a mismatch in the cache directory path: the target path specified in the mount instruction does not align with where the package manager actually stores its cache data in the container filesystem \(e.g., NPM defaults to a different cache folder, or pip uses /root/.cache/pip instead of /root/.pip\). Alternatively, they might be using docker buildx with a docker-container driver, which isolates cache per builder instance. The fix works because BuildKit only persists and re-attaches the cache volume if the target path and cache ID strictly match the previous run, and the builder state is preserved.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T02:48:23.806832+00:00— report_created — created