Docker出现tag显示none镜像的处理方案
作者:无限航线
本文介绍了Docker中出现REPOSITORY和TAG都显示为<none>的镜像,即悬挂镜像的原因,并提供了解决方法,包括查找和删除悬挂镜像,以及为它们指定新的标签
Docker出现tag显示none镜像的处理
在 Docker 中,有时候您会看到 REPOSITORY
和 TAG
都显示为 <none>
的镜像,这些被称为 “dangling images”,即悬挂镜像。
这些镜像通常是因为没有标签并且没有被任何容器使用。
以下是一些关于为什么会出现 <none>
镜像以及如何处理它们的信息:
为什么出现 <none> 镜像?
- 当构建一个新的 Docker 镜像,并且指定的标签与本地已有的镜像重名时,Docker 会将旧的镜像的标签替换为
<none>
,使得旧镜像成为悬挂镜像。 - 在 Docker 构建过程中,如果某一步失败,Docker 可能会留下一个空的镜像,这也是
<none>
镜像的一个来源。 - 如果您使用
docker save
保存镜像时没有指定镜像名称和标签,而是使用的镜像ID,那么加载(docker load
)这个镜像后,它的REPOSITORY
和TAG
都会变成<none>
。 - 如果您强制删除了正在被容器使用的镜像,那么这个镜像也会变成
<none>
。
如何使用 <none> 镜像?
- 通常情况下,您不应该使用
<none>
镜像,因为它们可能是构建过程中的中间产物或者是已经不再需要的旧镜像。 - 如果
<none>
镜像被任何容器引用,您仍然可以使用这些容器,但无法通过原来的标签来引用这些镜像。
如何处理 <none> 镜像?
您可以使用
docker images -f "dangling=true"
命令来查找所有的悬挂镜像。
[root@tgq207 ~]# docker images -f "dangling=true" REPOSITORY TAG IMAGE ID CREATED SIZE prom/node-exporter <none> 1dbe0e931976 2 years ago 20.9MB
使用
docker rmi $(docker images -f "dangling=true" -q)
命令来删除这些悬挂镜像,释放空间。
[root@tgq207 ~]# docker rmi $(docker images -f "dangling=true" -q) Error response from daemon: conflict: unable to delete 1dbe0e931976 (cannot be forced) - image is being used by running container 103762bbd6d7
如果显示正在被使用,需要保留 <none>
镜像,可以为它们指定新的标签
docker tag 1dbe0e931976 prom/node-exporter:latest
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。