Docker镜像仓库清理需按场景选择方法:本地镜像用docker image prune或rmi;私有registry(如Harbor)须调API或Web界面删除并触发垃圾回收;公有registry(如Docker Hub)依赖其API或界面操作,无统一万能工具。

Docker 镜像仓库清理不是只靠一个“工具”就能一劳永逸的事,而是要根据清理对象是本地镜像、私有 registry(如 Harbor)、还是公有 registry(如 Docker Hub),选择对应的方法和工具。没有统一的“万能清理工具”,但有几类成熟、可靠、被广泛使用的方案,下面按使用场景分清楚讲:
本地 Docker 引擎中的镜像清理
这是最常见也最直接的场景,指你本机或构建服务器上 `docker images` 能看到的那些镜像。-
清理悬空镜像(dangling images)
这些是构建时产生的中间层,没被任何标签引用,纯属冗余:docker image prune -f
-
清理所有未被容器引用的镜像(含带标签的旧版本)
比如某个服务已升级到v2.1,v1.0、v1.5又没容器在用,可安全删:docker image prune -a -f
-
按条件精准清理(推荐生产环境用)
例如:只删myapp仓库中超过 7 天未使用的镜像:docker image prune -a -f --filter "until=168h" --filter "reference=myapp:*"
-
批量删某仓库所有镜像(慎用)
docker rmi $(docker images myapp -q) 2>/dev/null || true
私有 Registry(如 Harbor、自建 registry)的镜像清理
本地 `docker rmi` 不影响远程 registry,必须调 API 或用平台功能。Harbor 用户:用 Web 界面最稳妥
登录 → 进入项目 → “镜像”页 → 勾选目标标签 → 点「删除」→ 确认。
删除后需手动触发「垃圾回收(Garbage Collection)」才能真正释放磁盘空间(后台定时任务或手动执行)。-
通用 registry(v2 API):用 curl + token
步骤三步走:- 获取 bearer token(需 registry 支持
/auth端点) - 查出目标镜像的 digest(用
GET /v2/<repo>/manifests/<tag>+Accept: application/vnd.docker.distribution.manifest.v2+json) - 发送
DELETE /v2/<repo>/manifests/<digest>请求
⚠️ 注意:registry 默认禁用 delete API,需在配置中显式开启
delete: enabled: true。 - 获取 bearer token(需 registry 支持
-
自动化脚本辅助(如
regCLI 工具)reg是轻量命令行工具,支持浏览、删除 registry 中的镜像:# 安装后列出 myapp 仓库所有 tag reg list my-registry.example.com/myapp # 删除指定 tag reg rm my-registry.example.com/myapp:v1.0.0
CI/CD 环境下的自动化清理策略
靠人盯不现实,建议嵌入流水线或定时任务。-
保留最近 N 个版本(安全又实用)
# 示例:保留 latest 和最近 5 个语义化版本 docker images myapp --format '{{.Tag}}' | \ grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | \ sort -Vr | tail -n +6 | \ xargs -r -I{} docker rmi myapp:{} -
按标签前缀清理(如 dev-、pr-、tmp-)
docker images --format '{{.Repository}}:{{.Tag}}' | \ grep ':dev-' | cut -d' ' -f1 | xargs -r docker rmi -
磁盘阈值触发清理(防爆满)
在 cron 中加判断:if [ $(df /var/lib/docker | awk 'NR==2 {print $5}' | sed 's/%//') -gt 85 ]; then docker image prune -a -f --filter "until=48h" fi
第三方辅助工具(可选,非必需)
- **`dockle` / `trivy`**:侧重安全扫描,可识别含漏洞镜像,辅助决策删哪些 - **`dive`**:分析镜像层,帮你发现臃肿层或重复内容,优化后再删旧版 - **`portainer`**:图形化管理,支持本地和部分 registry 的镜像删除(适合小团队快速操作)关键提醒:
✅ 删除前务必确认无运行容器依赖(docker ps --filter ancestor=xxx)
✅ 私有 registry 删除后几乎不可逆,重要镜像建议先 docker pull && docker save 备份
✅ docker system prune -a 会连网络、卷、构建缓存一起清,别在生产节点乱跑
不复杂但容易忽略。


















