如何删除存在子依赖、标签为<none>的Docker镜像
带依赖关系的标签镜像处理方案
你当前无法删除ID为27941809078c的ubuntu:v1(ID f15ee69edd3f)基于该镜像创建,二者存在分层依赖关系,Docker默认禁止删除/修改被其他镜像引用的底层依赖层。
根据你是否需要保留上层的ubuntu:v1镜像,选择对应操作即可:
- 不需要保留
ubuntu:v1:按从上到下的依赖顺序删除镜像,先删上层镜像再删底层镜像,执行以下命令:
docker rmi f15ee69edd3f docker rmi 27941809078c
- 需要保留
ubuntu:v1:先将上层镜像导出为独立归档,清除现有依赖镜像后重新导入即可解除依赖关系,执行以下命令:
# 将v1镜像导出为本地tar归档 docker save -o ubuntu_v1_backup.tar ubuntu:v1 # 按顺序删除存在依赖的两个镜像 docker rmi f15ee69edd3f docker rmi 27941809078c # 重新导入镜像,导入后的镜像不存在外部父层依赖 docker load -i ubuntu_v1_backup.tar
无名称无标签独立镜像处理方案
另一台设备上既无仓库名也无标签的镜像属于悬空镜像(dangling image),多为镜像构建、拉取、提交操作产生的无引用冗余层,按需求选择对应操作:
- 批量清理所有无引用的悬空镜像:执行官方内置的清理命令即可,该操作不会影响正在运行/停止的容器、以及被引用的有效镜像:
docker image prune
命令执行后出现确认提示时输入y回车,即可自动清除所有无依赖的无标签镜像。
- 单独删除指定无标签镜像:直接通过镜像ID执行删除命令即可,例如删除ID为
27941809078c的无标签镜像:
docker rmi 27941809078c
注意:如果执行删除时提示镜像被已停止容器占用,先执行
docker ps -a找到引用该镜像的容器ID,执行docker rm 容器ID删除对应容器后再删除镜像即可;如果提示被其他镜像依赖,参考上文带依赖关系的镜像方案按层级处理。
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

