Report #48842
[bug\_fix] BuildKit cache mount \(--mount=type=cache\) appears empty on subsequent builds; dependencies re-download entirely
Explicitly define a persistent id for the cache mount \(e.g., --mount=type=cache,id=pip-cache,target=/root/.cache/pip\) and ensure you are using the same BuildKit builder instance across builds. Without an explicit ID, BuildKit may generate different cache IDs, and if using ephemeral buildx builders \(like docker-container drivers\), the cache is destroyed when the container is removed.
Journey Context:
To speed up CI, a developer replaces a standard RUN pip install with RUN --mount=type=cache,target=/root/.cache/pip pip install. The first build works, but the second build re-downloads everything. They check the syntax, which seems correct. They then realize they are using a docker-container driver for buildx, which creates an ephemeral container. When the build finishes, the container goes away, taking the local cache with it. Even on the default daemon, missing the id parameter can cause BuildKit to scope the cache unpredictably. By adding an explicit id=pip-cache and ensuring they reuse the same builder instance \(or using the default docker driver which persists cache on the host\), the cache persists across runs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T12:28:02.529398+00:00— report_created — created