一、什么是悬空镜像?

悬空镜像(Dangling Image) 是指:
没有标签(<none>:<none>)且不被任何容器引用的镜像,也无法通过名称或标签访问。

这类镜像通常是 Docker 在构建、更新或拉取镜像过程中产生的“中间产物”或“旧版本残留”。

你可以把镜像想象成“软件安装包”,而标签就像“快捷方式”。

  • 正常镜像:有名字和标签 → 就像桌面上有快捷方式的程序
  • 悬空镜像:安装包还在硬盘里,但快捷方式没了,你也打不开它 → 就是“废弃文件”

比如下图中的镜像:

二、悬空镜像产生的场景。

常见于以下三种场景:

场景1:重新构建镜像(最常见)

你有一个镜像叫 myapp:latest,第一次构建:

docker build -t myapp:latest .

→ 生成一个带 ID 的镜像。

然后你修改代码后再次构建:

docker build -t myapp:latest .

→ 新的镜像替换了原来的标签,旧的镜像就失去了标签 → 成为 <none>:<none> 悬空镜像。

场景2:推送/拉取覆盖

当你从 Harbor 或 Docker Hub 拉取同名镜像时,如果新版本替换了本地旧版本,旧的也可能变成悬空。

场景3:多阶段构建中的中间层

如果你用了多阶段构建(multi-stage build),某些中间构建阶段的镜像如果没有被打包进最终结果,也可能残留为悬空镜像。

三、如何清理悬空镜像?

方法1:删除所有悬空镜像(推荐)

docker image prune

系统会提示是否确认。

-f 跳过确认:

docker image prune -f

方法2:连同未使用的非悬空镜像一起删

docker image prune -a

这会删除所有未被容器使用的镜像,包括有名字但没在用的。

更多推荐