docker image prune 默认只清理虚悬镜像(repository和tag均为且无任何引用的镜像层),不删除带标签镜像、运行中或已创建容器所依赖的镜像,但不检查以id启动的容器是否隐式引用 dangling 层。
直接用 docker image prune 就能清理虚悬镜像,但关键在于理解它“清什么”和“不碰什么”,避免误删正在被容器引用的层。
虚悬镜像到底是什么
虚悬镜像(dangling image)是那些:
• REPOSITORY 和 TAG 都显示为
• 没有被任何容器、也没有被其他带标签镜像(包括构建中间层)引用的镜像层
它们不是“垃圾文件”,而是构建或重打标签后“脱钩”的层——比如你反复 docker build -t app .,前一次生成的未打标底层就变成 dangling。
docker image prune 默认行为
这条命令默认只删满足 dangling=true 条件的镜像:
• 不影响带标签的镜像(哪怕已停止运行)
• 不删正在运行或已创建但未启动的容器所依赖的镜像 ID
• 但它不主动检查某个 dangling 镜像 ID 是否正被 docker ps -a 中某容器的 Image 字段直接引用(例如用镜像 ID 启动后没打 tag)
安全清理的实操步骤
推荐按顺序执行,降低风险:
• 先清理已退出容器:docker container prune -f(释放对镜像的隐式引用)
• 再查虚悬镜像列表确认范围:docker images -f dangling=true --format "table {{.ID}}\t{{.CreatedAt}}\t{{.Size}}"
• 最后执行清理:docker image prune -f
如果想进一步限制时间范围(比如只删最近2小时产生的),可加:--filter before=$(date -d '2 hours ago' +%Y-%m-%dT%H:%M:%S)(Linux)
清理后验证是否生效
运行以下命令,输出为空即表示虚悬镜像已清完:docker images -f dangling=true
也可对比清理前后磁盘占用:docker system df -v,重点关注 Images 下的 “Unique Size” 变化——真正被删掉的,是那些 Unique Size > 0 且无人引用的层。











