无法删除没有标记/标记的 docker 映像<none>



我正在使用docker,我发现当我运行

docker images -a

我有很多没有标签的图片,或者至少他们有一个标签

<none>

这些在我的磁盘上浪费了太多的空间,现在df -h告诉我我的根目录已经满了。

我在网上闲逛,发现

docker rmi -f $(docker images -a | grep "^<none>" | awk '{print $3}')

将至少遍历所有none,但随后我得到一大堆错误消息。

Error: response from daemon: Conflict, <id> wasn't deleted
Error: response from daemon: Conflict, <id> wasn't deleted 
Error: response from daemon: Conflict, <id> wasn't deleted
Error: response from daemon: Conflict, <id> wasn't deleted 
etc...
Error: failed to remove images: [<list of all the image ids that I want gone>]

这有点烦人。有人知道这些没有标记的图像是什么吗?为什么我的命令不能删除它们?

每当你构建一个新版本的标记图像(例如,你运行docker build -t foo .,改变Dockerfile中的一些东西,然后再次运行命令),旧的图像不会被删除;它的标签被拿走了。您看到的<none>是没有任何标记的图像,您可以通过指定它们的图像ID (fe336c4cdb2f或其他)在命令中引用它们。因此,可以通过将这些id传递给docker rmi来删除它们,或者您可以这样做:

docker images -f dangling=true -q | xargs -r docker rmi

如果您仍然收到无法删除图像的错误信息,可能仍然有容器在使用这些旧图像;运行docker ps -a检查

当您特别执行docker images -a时,REPOSITORY中的<none>而不是要删除的。这些是构成图像的内部图层。

根据@jwodder的建议,你应该删除docker images时出现的<none>(注意:我没有做-a)。如果您在执行docker images时在REPOSITORY中看到<none>,那么您可以执行:
docker rmi -f $(docker images -f dangling=true -q)

如果您的磁盘空间已满,请尝试删除您不需要的图像,并查看何时执行docker images,而不是-a

最新更新