构建缓存是 docker 磁盘占用的“隐形大户”,可通过 docker system df 查看 size 与 reclaimable,用 docker builder prune --dry-run 预估清理空间,推荐日常执行 docker builder prune -f 安全释放未使用缓存。
构建缓存是 docker 占用磁盘空间的“隐形大户”,尤其在 ci/cd 频繁构建、多分支开发或启用 buildkit 的场景下,缓存层可能累积数 gb 甚至数十 gb。它不像镜像那样有明确标签,容易被忽略,但清理起来高效且安全。
先确认构建缓存到底占了多少
别急着删,先看清楚现状:
- 运行 docker builder prune --dry-run:预估可释放空间(不实际删除)
- 运行 docker system df -v:在输出中找到 Build Cache 行,重点关注 SIZE 和 RECLAIMABLE 列
- 若使用 BuildKit,还可加 --format 查看详细缓存项:
DOCKER_BUILDKIT=1 docker builder prune --dry-run --format "table {{.ID}}\t{{.Size}}\t{{.LastUsed}}"
安全清理构建缓存(推荐日常用)
默认只清未被任何构建引用的缓存,不影响当前或近期构建效率:
- docker builder prune -f:强制清理所有未使用缓存,无提示
- 加时间过滤更精准:
docker builder prune -f --filter "until=72h"(只删 3 天前未用过的缓存) - 如需查看将被删哪些项,去掉 -f,再加 --dry-run
彻底清理(适用于磁盘告急或环境重置)
当缓存严重堆积、或你确定不再复用历史构建结果时,可清空全部:
- docker builder prune -a -f:删除所有构建缓存(含正在被引用的旧缓存),释放最彻底
- 注意:下次构建会变慢,因所有中间层需重新生成;适合测试机、CI 构建节点定期执行
- 搭配系统级清理更省心:
docker system prune -a -f --volumes(⚠️含卷,慎用)或
docker system prune -f(更安全,不含卷)
预防缓存持续膨胀
光清理不够,得从源头控量:
- CI 脚本中固定加入 docker builder prune -f 作为最后一步
- 设置定时任务(如每天凌晨):
0 2 * * * /usr/bin/docker builder prune -f >/dev/null 2>&1 - 启用构建缓存限制(BuildKit):
在 /etc/docker/daemon.json 中添加:
{"builder": {"gc": {"enabled": true, "defaultKeepStorage": "20GB"}},重启 Docker 生效 - 避免无意义的构建:如未改代码却反复 docker build .,可加 --cache-from 或跳过











