如何删除 Docker 镜像?
删单个镜像 docker rmi 镜像名:标签,批量删 docker rmi 名1 名2,全删 docker rmi $(docker images -aq);被容器占用的需先删容器或 -f。悬空镜像用 docker image prune。本文汇总。
基本命令:docker rmi <镜像名:标签或ID> 删指定镜像;多个一起删就列多个参数;全部删除用 docker rmi $(docker images -aq)。删不掉的两种原因:有容器在用(先删容器或 -f 强删)、有多个标签(每个标签删一次或按 ID 强删)。
先看有什么
docker images -a
按名/按 ID 删
docker rmi nginx:1.25 # 按 名称:标签
docker rmi d583c3ac45fd # 按镜像 ID
docker rmi img1:tag img2:tag d583 # 批量
注意:按名删只是删标签;镜像有多个标签时数据还在,直到最后一个标签被删。
删不掉的处理
被容器引用(哪怕容器已停止):
Error response from daemon: conflict: unable to remove repository reference ... container is using it
docker rm $(docker ps -aq --filter ancestor=nginx:1.25) # 删引用它的容器
docker rmi nginx:1.25
# 或强行
docker rmi -f nginx:1.25
清空全部镜像
docker rm -f $(docker ps -aq) # 先删全部容器
docker rmi -f $(docker images -aq) # 再删全部镜像
更常用的等价物:docker system prune -a(未使用的镜像+停止容器+网络+缓存一锅端)。
只清悬空镜像
重新构建后留下一堆 <none>:<none>:
docker image prune # 只清悬空层,不动有标签的
观测云对照
镜像膨胀趋势看得见。 DataKit 采集主机镜像数量与磁盘占用,监控器对 /var/lib/docker 用量告警,把"删镜像救磁盘"变成前置动作而非救火。
常见问题(FAQ)
Q:rmi 之后磁盘空间没释放?
A:镜像层被其他镜像共享,删一个标签可能只释放少量独有层;docker system df 看真实可回收量。
Q:仓库里的镜像怎么删?
A:rmi 只删本地。远端仓库要在仓库侧操作(Harbor 控制台/Registry API),再考虑垃圾回收。
Q:能不能保留最近 N 个版本自动清理?
A:Docker 本身没有,写脚本按时间排序过滤;CI 场景建议配合仓库侧保留策略。