Report #10528
[bug\_fix] BuildKit cache mount \(\`--mount=type=cache\`\) not persisting or failing silently
Ensure the target directory for the cache mount exists in the image filesystem before the \`RUN\` instruction, or create it inline. Additionally, explicitly specify a consistent \`id\` for the cache \(e.g., \`id=npm-cache\`\) to ensure it persists across builds and stages.
Journey Context:
A developer switches to BuildKit to speed up dependency installation using \`RUN --mount=type=cache,target=/root/.npm npm install\`. The build succeeds, but dependencies are re-downloaded entirely on every build, negating the cache benefit. They debug by checking BuildKit cache usage \(\`docker buildx du\`\) and trying different package managers. The root cause is often that the target directory \(\`/root/.npm\`\) doesn't exist in the base image prior to the mount, causing the mount to behave unexpectedly, or the cache \`id\` is auto-generated and changes. By adding \`mkdir -p /root/.npm\` before the mount \(or using \`target=/root/.npm,id=npm-cache\`\), BuildKit correctly attaches the persistent cache volume to that specific path and ID, restoring the expected caching behavior.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T10:54:07.542196+00:00— report_created — created