如何清理旧的、不再使用的 Docker 镜像?

docker image prune 清悬空(<none>)镜像;docker image prune -a 清所有没被容器使用的镜像;docker system prune -a 连容器网络一起清。本文区分"悬空"与"未使用"并给清理策略。

最佳实践
如何清理旧的、不再使用的 Docker 镜像?封面

两级清理:docker image prune悬空镜像**(重新构建后失去标签的 <none> 层,安全无害);docker image prune -a所有未被任何容器引用的镜像(含带标签的,较激进)。日常定期跑前者,磁盘告急时用后者。**

两个概念先分清

  • 悬空镜像(dangling)<none>:<none>——重建同名镜像后旧版本失去标签变成的残留
  • 未使用镜像(unused):没有任何容器(含停止的)在引用它,可能还带着正常标签
docker images -f dangling=true     # 看悬空镜像

清理命令

docker image prune          # 只清悬空(安全)
docker image prune -a       # 清全部未被引用的(激进)
docker system prune -a      # 未用镜像+停止容器+未用网络 一锅端

-f 跳过确认;--filter "until=168h" 可只清一周前的。

保留策略示例

清理但保留最近在用和基础镜像:

# 列出一周前创建的镜像 ID
docker images --format '{{.ID}} {{.CreatedAt}}' | sort -k2 | head -20

# 或按过滤清
docker image prune -a --filter "until=720h"   # 30 天前且未使用的

不同角色的清理节奏

机器角色 建议
CI 构建机 每天 docker system prune -f,构建缓存另设 builder prune
开发机 每周一次 image prune
生产主机 保留当前+上一个版本镜像用于回滚,其余定期清

观测云对照

镜像卫生指标化。 各主机镜像数量、磁盘占用、悬空层体积由 DataKit 采集成趋势,"哪台机该清了"看板直答,监控器对磁盘水位告警兜底。

常见问题(FAQ)

Q:prune -a 会不会把正在用的镜像删了?
A:不会。被任何容器(运行或停止)引用的镜像都受保护;但"备着没跑"的镜像会被清,执行前过一遍 docker images

Q:清理后 pull 会变慢吗?
A:被清掉的镜像下次用要重新拉取,内网仓库影响不大。

Q:私有仓库里的旧镜像怎么清?
A:本地 prune 管不到远端;Harbor 配保留策略(保留最近 N 个 tag),Registry 原生要调 API 删 manifest 再 GC。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台