docker image prune 默认只删除悬空镜像(无标签且未被引用的中间层),加 -a 可删所有未被容器引用的镜像(含带标签的),配合 --filter 能按时间或标签精准筛选,docker system prune 则支持一键清理多种资源。

用 docker image prune 清理镜像,核心是分清“悬空”和“未使用”两类对象——默认只删前者,加参数才能清理后者。
只删悬空镜像(最安全)
悬空镜像(dangling images)指没有标签、也不被任何容器或其它镜像引用的中间层,通常是重复构建产生的冗余层。执行:
-
docker image prune:默认行为,只删这类镜像 - 运行时会提示确认,输入
y继续;加-f可跳过(如docker image prune -f) - 不会影响带标签的镜像,哪怕它当前没容器在用
删所有未被容器引用的镜像(含带标签的)
如果你希望清理掉那些有名字、有标签,但确实没容器在运行或已创建依赖它的镜像,就得加 -a 参数:
-
docker image prune -a:删所有未被任意容器(包括已停止的)引用的镜像 - 仍会保留正在运行或已创建(
docker create)但未启动的容器所依赖的镜像 - 建议先运行
docker ps -a和docker images对照检查,避免误删
按条件筛选后清理(更精准)
可以用 --filter 限定范围,比如只清理某段时间前的未用镜像:
-
docker image prune -a --filter "until=72h":删掉 72 小时前创建且未被使用的镜像 -
--filter "label=stage=dev":只处理带指定 label 的镜像(需构建时打标) - 多个 filter 可叠加,例如:
--filter "until=24h" --filter "label!=prod"
配合 system prune 一键清理多种资源
如果想同时清理镜像、网络、构建缓存等,docker system prune 更省事:
-
docker system prune:删停止的容器、悬空镜像、未用网络、构建缓存 -
docker system prune -a:再加-a,把所有未被容器引用的镜像也一并清理 -
docker system prune -a --volumes:额外加上未挂载卷(注意:卷内数据不可恢复)


















