docker rmi 是什么
删除本地镜像。要分清两种情况:按标签删除只是摘掉一个引用名,镜像数据仍被其他标签或容器引用时不会真正消失;按内容标识删除则会摘掉该镜像的全部标签并删除本体。动手前的第一步是确认引用关系。
基本信息
| 语法 | docker rmi [选项] 镜像[:标签|标识] |
|---|---|
| 删除粒度 | 按标签删一个引用,按标识删全部引用与本体 |
| 常用选项 | -f 强制删除 --no-prune 保留未被引用的父层 |
| 前置检查 | 确认没有容器(含已停止容器)在使用该镜像 |
| 报错常见原因 | 镜像仍被容器引用,或存在多个标签指向同一标识 |
典型使用场景
- 清理旧版本:确认回滚不需要后删除历史版本标签,释放空间
- 收敛本地镜像:开发机上积累了大量构建产物,按仓库名批量清理
- 修正标签错误:名字打错后删掉错误引用,重新打正确标签
- 为磁盘腾空间:结合占用总览确定哪些镜像可以回收
- 规范仓库:把不再维护的镜像从本地删除,减少误解用风险
常用示例
常用示例
docker rmi app/web:1.0 # 删除指定标签
docker rmi registry.example.com/team/app-web:1.0 app/web:latest # 一次删多个标签
docker ps -a --filter ancestor=app/web:1.0 # 先确认有没有容器在用
docker rmi -f app/web:1.0 # 强制删除,谨慎使用
docker images --filter dangling=true # 顺手看看悬空镜像删不掉的常见原因
| 提示 | 原因 | 处理办法 |
|---|---|---|
| 镜像被容器使用 | 有运行中或已停止的容器引用它 | 先处置容器,或改成按标签删掉多余引用 |
| 与其他标签冲突 | 同一标识上有多个标签 | 按完整标签删除,或改为按标识删除全部引用 |
| 层被其他镜像共享 | 该层仍被别的镜像引用 | 属于正常现象,无需处理 |
| 权限不足 | 当前账号无权访问引擎 | 确认权限后重试 |
| 网络与仓库无关 | 删除是本地操作 | 不要把本地删除失败归因于远端仓库 |
清理镜像的顺序
- 先看占用总览,确认哪些类型占用最多,避免只清镜像效果有限
- 再列出本地镜像,按仓库名与创建时间确定候选集合
- 确认回滚所需版本已经推送到仓库或导出留档
- 删除时优先按标签操作,遇到共用标识时再决定是否删掉全部引用
- 清理后复核一次列表与占用,确认达到了预期效果
只删标签不等于删镜像。共享同一标识的多个标签中删掉一个,镜像数据仍被其他标签引用,磁盘占用几乎不变。
强制删除会连带处理依赖该镜像的中间层,仅在确认没有其他引用时使用。运行中容器的镜像被强删,可能导致容器重建时找不到基础镜像。