清理未使用的无用镜像和悬空镜像,核心是区分两类对象:悬空镜像(dangling)指没有仓库名和标签、仅由id标识的中间层;无用镜像(unused)指有标签但未被任何容器引用、长期闲置的完整镜像。二者都占用磁盘空间,且不随容器运行自动释放。

清理未使用的无用镜像和悬空镜像,核心是区分两类对象:悬空镜像(dangling)指没有仓库名和标签、仅由ID标识的中间层;无用镜像(unused)指有标签但未被任何容器引用、长期闲置的完整镜像。二者都占用磁盘空间,且不随容器运行自动释放。
识别并清理悬空镜像
悬空镜像是构建或删除操作后残留的“孤儿层”,无法通过名称管理,但可安全删除:
- 列出所有悬空镜像:docker images --filter "dangling=true"
- 一键强制清理:docker image prune -f(推荐日常执行)
- 若想预览再决定,去掉 -f 参数,会提示确认
精准清理未被引用的带标签镜像
这类镜像有明确名称和标签(如 myapp:v1.0),但已无容器在使用,需谨慎判断是否真“无用”:
- 删除所有未被任何容器引用的带标签镜像:docker image prune -a -f
- 只删指定仓库的未用镜像(例如只清 backend/*):docker image prune -a -f --filter "reference=backend:*"
- 结合时间过滤,删7天前创建的未用镜像:docker image prune -a -f --filter "until=168h"
辅助检查与安全验证
执行清理前,建议先确认哪些镜像实际处于“闲置”状态,避免误删:
- 查看所有镜像及其引用情况:docker images -a
- 检查哪些镜像被当前容器使用:docker ps -a --format "{{.Image}}",再比对 docker images 输出
- 对关键镜像,可用 docker inspect 查看 RepoTags 和 Created 时间,辅助判断用途
清理后释放空间验证
清理命令本身不显示释放了多少空间,可通过以下方式验证效果:
- 查看Docker整体磁盘用量:docker system df(重点关注 Images 行的 SIZE 和 RECLAIMABLE)
- 对比清理前后 docker system df -v 输出,观察各镜像层变化
- Linux下直接查目录大小:du -sh /var/lib/docker/image/overlay2(路径以 docker info | grep "Docker Root Dir" 为准)











