删镜像需精准稳妥,本地先查后删防误伤,用docker image prune安全批量清理;远程须调api或界面操作,并触发垃圾回收;清理后执行docker system prune释放空间。

直接删镜像不是简单执行一条命令就完事,关键在删得准、删得稳、不误删。本地镜像清理和远程仓库删除逻辑不同,操作方式也不同,得分开处理。
本地镜像:先查再删,避免误伤运行环境
删之前必须确认镜像没被容器使用,否则可能中断服务。常用组合操作如下:
- 列出所有镜像,含中间层: docker images -a
- 只看镜像 ID(方便脚本处理): docker images -q
- 检查某镜像是否被容器引用: docker ps -a --filter "ancestor=nginx:1.21"
- 安全删除单个镜像(无依赖时): docker rmi nginx:latest
- 强制删除(慎用): docker rmi -f sha256:abc123...
批量清理:按需筛选,不一刀切
日常维护推荐用内置 prune 命令,比手动拼接 shell 更可靠:
- 删所有悬空镜像(untagged 层): docker image prune
- 删所有未被任何容器引用的镜像: docker image prune -a
- 删 48 小时前未使用的镜像: docker image prune -a --filter "until=48h"
- 删指定仓库下的全部镜像: docker rmi $(docker images -q myapp/*)
远程仓库:不能靠 docker rmi,得走 API 或界面
docker rmi 只作用于本地已拉取的镜像,对远程仓库(如 Harbor、Docker Hub)无效。真正删远端镜像要:
- Harbor 用户:调用 /api/v2.0/projects/{proj}/repositories/{repo}/artifacts/{tag} 的 DELETE 接口,需管理员权限
- Docker Hub 用户:用 curl 发送带 Bearer Token 的 DELETE 请求到 v2/repositories/用户名/镜像名/tags/标签名/
- 图形界面操作:登录 Web 控制台,在仓库 → 标签页点击“Delete”按钮(适合少量操作)
- 删完别忘了触发垃圾回收(GC),尤其 Harbor 需手动执行,否则 blob 数据仍占用磁盘
清理后建议:顺手做点收尾动作
删完镜像只是第一步,残留数据还占空间:
- 清理构建缓存、停止容器、闲置网络: docker system prune
- 连卷和未使用镜像一起清: docker system prune -a --volumes
- 查看实际磁盘占用: docker system df,确认释放效果
- 重要镜像提前导出备份: docker save -o backup.tar nginx:1.21











