如果没有标签/ <无>标签,则无法移除docker图像
我正在使用docker工具 ,我发现,当我运行一个
docker images -a
我有很多没有标签的图像,或者至less有一个标签
<none>
这些在我的磁盘上浪费太多空间,现在df -h告诉我,我的根已满。
我潜伏在互联网上,发现这一点
docker rmi -f $(docker images -a | grep "^<none>" | awk '{print $3}')
至less会遍历所有的没有,但是我得到了一大堆的错误信息。
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>]
这有点烦人。 有谁知道这些没有标记的图像是什么,为什么我的命令没有摆脱他们?
每当你build立一个新版本的标记图像(例如,你运行docker build -t foo .
,在Dockerfile中改变一些东西,然后再次运行该命令),旧的图像不会被删除。 它只是把它的标签带走。 你看到的<none>
是没有任何标签的图像,你可以通过指定它们的图像ID( fe336c4cdb2f
或其他)来引用它们。 因此可以通过将这些ID传递给docker rmi
来删除它们,或者可以这样做:
docker images -f dangling=true -q | xargs -r docker rmi
如果仍然收到关于无法删除图像的错误信息,则可能是仍然存在使用这些旧图像的容器; 通过运行docker ps -a
检查。
那些在REPOSITORY中的<none>
,当你特别做docker images -a
并不意味着被删除。 那些是构成你的形象的内部层。
正如@jwodder所build议的那样,你应该删除当你做docker images
时出现的<none>
那些(注意:我没有做-a
)。 如果您在执行docker images
时在REPOSITORY中看到<none>
,则可以执行以下操作:
docker rmi -f $(docker images -f dangling=true -q)
如果磁盘空间已满,请尝试删除不需要的图像,然后查看您何时执行docker images
,而不是使用-a
。