docker rmi 是什么
docker rmi 删除本地镜像。删除的前提是没有任何容器引用它,包括已经停止的容器;被引用时会报冲突错误,需要先删容器或加 -f 强制解除引用。清理悬空镜像更适合用 image prune:它只处理没有标签、也没有容器引用的中间层,比手工挑镜像名安全得多。
基本信息
| 基本语法 | docker rmi 镜像[:标签] 或 镜像 ID |
|---|---|
| 约束 | 有容器引用(含已停止)时删除失败并报冲突 |
| -f | 强制解除引用后删除,会连同依赖标签一起移除 |
| 清理悬空 | docker image prune;加 -a 会删除更多未使用镜像 |
| 行为边界 | 删除镜像不影响正在运行的容器,容器层已加载 |
典型使用场景
- 磁盘清理:删掉旧版本镜像,释放 /var/lib/docker 空间
- 误推修正:标签打错后删除本地错误标签再重新构建
- 仓库搬迁:确认新仓库拉取正常后,删掉本地旧仓库镜像
- CI 机器瘦身:每次构建后清理上一版镜像,避免磁盘持续增长
- 发布回滚准备:删除无用候选版本,仅保留可回滚的两个版本
删除与清理
删除与清理
docker images # 先看清镜像 ID 与标签指向
docker rmi nginx:1.26 # 删除指定标签,不影响其他标签
docker rmi -f nginx:1.26 # 解除容器引用后强制删除
docker rmi $(docker images -q --filter "dangling=true") # 删除悬空镜像
docker image prune # 更安全的悬空镜像清理方式
docker image prune -a # 删除所有未使用镜像,谨慎对待删除失败原因对照
| 报错信息 | 原因 | 处理方式 |
|---|---|---|
| image is being used by container | 有容器引用了该镜像 | 先 docker rm 容器,或用 -f 强制 |
| conflict: unable to delete | 存在停止状态的容器 | 清理停止容器后再删镜像 |
| No such image | 标签或 ID 写错 | 用 docker images 核对实际名称 |
| deleted but still referenced | 多个标签指向同一 ID | 逐个删除标签,直到 ID 不再出现 |
image prune -a 会清掉构建缓存与未使用的基础镜像,下一次构建可能全量重建并重新拉取依赖,耗时明显增加。生产与 CI 机器上要挑业务低峰执行。
删除镜像不影响正在运行的容器:容器启动时所需的层已经加载,删除只是让镜像引用消失,运行中的服务不会中断。