我正在使用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
。