Docker buildkit cache location/size and ID

Yes, it is somewhat vague in docker 20.10.5. Could use a pull request or two to update documentation.

  1. The docker driver cache uses the same storage driver as used for image layers. Metadata is stored in databases at /var/lib/docker/buildkit. When docker uses overlay2 storage driver, the layer is in /var/lib/docker/overlay2/<ID>/diff/. For <ID>, see below. /var/lib/docker can vary depending on data-root in your dockerd configuration. Builders using docker-container or kubernetes driver keeps the data on a volume.
  2. docker buildx [--builder name] du --verbose lists build cache. You can also inspect the docker driver caches from docker system df -v --format '{{ .BuildCache | json }}'. The cache type exec.cachemount is the RUN --mount type=cache. You can find the layer using the ID, which is not the same as used in --mount id. The mount type is implemented by buildkit, so the docker run --mount does not recognize it. To get rid of it either docker buildx prune or docker build --no-cache.
  3. The cache key is the value from id=. id defaults to value of target. You need to specify id when you need different cache at the same target.
  4. Yes. They are the same cache regardless of the target or Dockerfile. Different builders have their own caches, which keeps for example caches for different architectures separate.

Leave a Comment