Docker 构建缓存变大时,可以先看 buildx du

33 次浏览2 条回复

Docker 构建缓存占满磁盘时,可以先看缓存到底被哪些记录占着,不用一上来全清。环境:Docker Buildx 0.10+。

docker buildx du

想看更细的占用和可回收空间:

docker buildx du --verbose
docker buildx prune --dry-run

确认过再清理,例如只清理未使用超过一周的缓存:

docker buildx prune --filter until=168h

多 builder 或 CI 环境里,记得先确认当前 builder:

docker buildx ls
docker buildx inspect --bootstrap

du 看到的是当前 builder 的缓存;如果空间还是对不上,可能还有镜像层、容器日志或另一个 builder 在占用。

补一个容易漏的点:CI 里最好显式带上 builder 名称,不然本地和流水线查到的可能不是同一份缓存。

docker buildx ls
docker buildx du --builder <builder-name>
docker buildx prune --builder <builder-name> --filter until=168h --force

另外 prune 默认只处理当前 builder 里不再使用的缓存,正在被引用的层不会因为空间紧张就自动删掉。清理前可以把 builder 名称和 du 输出记到 CI 日志里,后面排查磁盘增长会省点时间。

再补一个边界:如果 CI 用了 --cache-to type=registry 或远端 builder,buildx du 只看当前 builder 的本地缓存,清这里不会让镜像仓库里的缓存变小。仓库侧还得按 tag/manifest 配保留策略;否则本地磁盘正常了,远端缓存仍会持续涨。