代码之家  ›  专栏  ›  技术社区  ›  Jim

即使没有容器正在运行,也无法删除图像

  •  1
  • Jim  · 技术社区  · 6 年前

    我的机器中有多个停止的容器和图像。
    我想清理并移除所有容器:
    docker ps -a 不返回任何内容。
    我跑 docker rmi $(docker images -q) 要删除缓存的图像,但我得到:

    来自守护程序的错误响应:冲突:无法删除。。。 (必须强制)-图像在多个存储库中引用

    它在说什么?

    0 回复  |  直到 6 年前
        1
  •  107
  •   Gabriel    6 年前

    如果没有“力”修改器,则无法删除具有多个存储库的图像,请参见Docker docs 了解更多信息。

    docker images
    REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
    repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
    repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB
    

    如果要手动执行此操作,而不是使用图像id删除图像,则必须删除不需要使用图像名称的存储库/标记:

    docker rmi a8e6fa672e89
    Error response from daemon: conflict: unable to delete a8e6fa672e89 (must be forced) - image is referenced in multiple repositories
    

    删除不需要的存储库/标签:

    docker rmi repository/image-name:tag
    Untagged: repository/image-name:tag
    Untagged: repository/image-name:tag@sha256:64b5a02e2bb3ee4d4b7c0982e8e2e5eb68bdfd0fb096fce22b6c030dafb53a33
    

    (重复上一步,直到只剩下一个存储库/标签),现在您可以删除图像:

    docker rmi a8e6fa672e89
    Untagged: repository2/image-name:tag
    Deleted: sha256:a8e6fa672e89b399bd3ac52b96c031e6816a69191d1fd7e6a1839fd643e3c751
    Deleted: sha256:9861dd7b5783217515f571fdcfa6729e1e38af3ae9c971026e5a317b12fc5905
    

    如果使用-f标志并指定图像的短ID或长ID,则rmi将取消标记并删除与指定ID匹配的所有图像。

        2
  •  21
  •   Heri    5 年前

    它所说的“存储库”是一篇文章第一栏的一部分 docker images :

    docker images
    REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
    repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
    repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB
    

    (我采集了加布里埃尔在回答中展示的样本)

    这里我们有两个存储库:“存储库”和“repository2”。正如您也可以看到的,两个图像都有相同的图像ID。

    A. docker images -q 列出所有可用的图像ID。因此,如果要删除由两个图像引用的图像ID,则会出现前面提到的错误。

    解决方案:您可以通过名称而不是ID删除图像:

    docker rmi repository/image-name:tag
    
        3
  •  6
  •   Adrian Mole Chris    4 年前

    要强制删除引用多个存储库的Docker映像,只需使用以下命令:

    sudo docker rmi -f image_id
    
        4
  •  3
  •   Toir    4 年前

    你可以清理所有的容器。首先,你需要用以下方法停止所有容器: docker stop $(docker ps -aq) .最后,用以下方法移除所有容器: docker rm $(docker ps -aq) .你可以在一个命令中完成这一切 docker rm $(docker stop $(docker ps -aq)) .

    如果要删除所有容器数据:

    docker container prune
    docker network prune
    docker system prune
    docker volume prune
    docker builder prune
    
        5
  •  3
  •   Berend de Boer    3 年前

    潜在的问题是,您试图删除该图像,但该图像被标记为Tarun Banda所写。因此,不要根据图像的id删除图像,而是根据其标签删除图像。这将取消标记图像,然后将其删除。

    以下是清理旧容器的示例:

    docker images | grep '3 weeks ago' | awk '{print $1 ":" $2}' | xargs -n 1 docker rmi
    
        6
  •  2
  •   Liam Joshua    5 年前

    如果确定要删除所有图像,可以使用以下命令:

    docker images | awk '{print $1":"$2}' | egrep -E 'REPOSITORY|TAG' | xargs -n1 docker rmi
    
        7
  •  2
  •   Tarun Banda    4 年前

    来自守护程序的错误响应:冲突:无法删除3472c3b5350b(必须强制)-映像在多个存储库中引用 来自守护程序的错误响应:冲突:无法删除3472c3b5350b(必须强制)-映像在多个存储库中引用

    如果此错误首先出现,请取消标记图像,然后将其删除。 这可以通过使用以下命令来完成。 docker rmi:<图像标签>

        8
  •  1
  •   Soner PALANCI    4 年前

    删除一条记录:sudo docker rmi-f<图片名称>

    要删除所有图像:
    sudo docker rmi-f$(sudo docker images-a-q)

    “-f”参数很重要

        9
  •  -1
  •   Ammar Lakis    4 年前
     docker rmi `docker images --format="{{.Repository}}:{{.Tag}}"`