【问题标题】:Cannot remove docker images without tags/<none> tags无法删除没有标签/<none> 标签的 docker 图像
【发布时间】:2015-07-28 21:12:32
【问题描述】:

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

docker images -a

我有大量没有标签的图像,或者至少它们有一个标签

<none>

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

我在网上找了一圈发现

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

至少会遍历所有没有的,但随后我会收到一大堆错误消息。

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>]

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

【问题讨论】:

    标签: awk grep docker delete-file image-file


    【解决方案1】:

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

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

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

    【讨论】:

    • 没有更多的容器了,我可以杀掉所有的容器。
    • 实际上,当我运行 docker ps -a 时似乎确实有一个,但由于某种原因我无法杀死它。它会确认我的“docker stop ”,但是当我再次检查时,它仍然存在
    • @Zack: docker stop 不会删除容器;你需要docker rm
    • 好吧,对不起,是的,我就是这么做的。它移除了容器。我尝试了你现在给我的命令,它并没有杀死 none 标签
    【解决方案2】:

    当您专门执行docker images -a 时,REPOSITORY 中的那些&lt;none&gt;不会被删除的。这些是构成图像的内部层。

    按照@jwodder 的建议,您应该删除docker images 时出现的&lt;none&gt;ones(注意:我没有这样做-a)。如果您在执行 docker images 时在 REPOSITORY 中看到 &lt;none&gt;,那么您可以执行以下操作:
    docker rmi -f $(docker images -f dangling=true -q)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2017-08-04
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      相关资源
      最近更新 更多