Docker中悬空镜像和构建缓存是磁盘空间隐形消耗主因,需分类清理:悬空镜像用docker image prune -f;构建缓存用docker builder prune -f;无用带标签镜像用docker image prune -a -f;清理后用docker system df查看释放效果。

Docker 中的悬空镜像和构建缓存是磁盘空间“悄悄吃掉”的主要元凶,它们不显示在常规使用中,却可能累积数 GB 甚至数十 GB。清理的关键不是全删,而是分清类型、按需下手。
悬空镜像(dangling images)怎么清
悬空镜像是指没有仓库名和标签(显示为 <none>:<none>)、且未被任何容器或镜像层引用的中间层。它们常见于重复构建或拉取新版本后旧层失标,完全可安全清除。
- 运行
docker image prune -f即可一键清理所有悬空镜像 - 加上
--filter "until=72h"可限定只删 3 天前产生的悬空镜像:docker image prune -f --filter "until=72h" - 想预览将删哪些再确认?去掉
-f,执行docker image prune,会列出待删项并提示确认
构建缓存(BuildKit cache)怎么清
这类缓存不属于镜像,不显示在 docker images 中,但实际占用大量空间,尤其在 CI/CD 或频繁中断构建(如 Ctrl+C)后极易堆积。位置在 /var/lib/docker/buildkit/cache,只能通过 Docker 命令管理。
- 清当前未被任何构建任务使用的缓存:
docker builder prune -f - 清全部构建缓存(含正在被引用的?不会,它只清未被引用的):
docker builder prune -a -f - 按时间精准清理(例如删一周前的):
docker builder prune -f --filter "until=168h" - 查看缓存占用量(不删,只统计):
docker builder prune --dry-run
别漏掉“带标签但没用”的镜像
很多用户以为只有 <none> 才要清,其实像 nginx:1.24、redis:7.0 这类有标签但从未运行过容器、或对应容器早已删除的镜像,同样属于“无用”,占空间却不服务。
- 清所有未被任何容器引用的镜像(含带标签的):
docker image prune -a -f - 锁定范围清理更安全,比如只清自己项目的旧版:
docker image prune -a -f --filter "reference=myapp:*"
或组合条件:--filter "reference=python:3.9" --filter "until=336h"
清理后建议用 docker system df 看一眼各类型空间释放情况,镜像、构建缓存、卷的占比一目了然。不复杂但容易忽略。


















