如果没有标签/ <无>标签,则无法移除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