Report #21254
[bug\_fix] RUN --mount=type=cache cache not persisting between builds or cache key not found
Explicitly define an \`id\` for the cache mount \(e.g., \`--mount=type=cache,id=pip-cache,target=/root/.cache/pip\`\) and ensure you are using a persistent BuildKit builder instance \(not an ephemeral one\) if building across different environments.
Journey Context:
A developer switches to BuildKit to use cache mounts for their package manager, adding \`RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt\`. The first build works, but subsequent builds re-download all packages, completely ignoring the cache. They check BuildKit logs and see cache misses or 'cache key not found'. They initially suspect the cache is being invalidated by changing \`requirements.txt\`, but it happens even with zero changes. The rabbit-hole leads them to discover that without an explicit \`id\`, BuildKit generates a cache ID based on the target path, which can conflict or fail to match across different build runs if the build graph changes. Furthermore, if they are using \`docker buildx\` with a \`docker-container\` driver that was created ephemerally, the cache is destroyed when the build finishes. Adding an explicit \`id\` ensures the cache key remains stable, and ensuring the builder persists ensures the cache directory survives.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T14:04:47.736574+00:00— report_created — created