【问题标题】:How can I delete Docker's images?如何删除 Docker 镜像?
【发布时间】:2014-02-19 07:24:12
【问题描述】:

我有以下图片:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

当我尝试删除其中一个时,我得到:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

如何删除它们?为什么会有这样的冲突?

【问题讨论】:

    标签: docker


    【解决方案1】:

    要删除所有图像,请使用给定命令

    docker rmi $(docker images -q)
    

    要删除所有容器,请使用给定命令

    docker rm $(docker ps -a -q)
    

    警告:这将破坏您的所有图像和容器。将无法恢复它们!

    此解决方案由Techoverflow.net提供。

    【讨论】:

    • 简单直接。您也可以使用以下命令强制删除图像。 'docker rmi -f $(docker images -q)'
    • windows powershell 等效为docker images -q | %{docker rmi -f $_}
    • 首先我使用@muheed How to Answer (stackoverflow.com/a/30475249/2747020) 上的cmd来解锁删除一些图像:sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
    • 用于 docker 容器的 Windows Powershell docker ps -a -q | %{docker rm -f $_}
    • 正如@alexyz78 下面的注释,您现在可以使用docker system prune。所以要擦除所有内容:docker kill $(docker ps -q) 停止容器,然后是 docker system prune -a 将删除所有内容 - 请参阅 stackoverflow.com/a/44309011/247708
    【解决方案2】:

    可能的原因: 原因可能是该映像当前被正在运行的容器使用。在这种情况下,您可以列出正在运行的容器,停止相关容器,然后删除镜像:

    docker ps
    docker stop <containerid>
    docker rm <containerid>
    docker rmi <imageid>
    

    如果你无法通过 docker ps 找到容器,你可以使用它来列出所有已经退出的容器并删除它们。

    docker ps -a | grep 60afe4036d97
    docker rm <containerid>
    

    注意:小心在使用Volume-Only 容器的情况下一次删除所有退出的容器。它们保持Exit 状态,但包含有用的数据

    【讨论】:

    • 实际上,您会收到一条消息指定。也许另一张图片是基于这个?请先尝试删除您从此图像创建的所有图像。
    • 我能够使用sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm(感谢github.com/dotcloud/docker/issues/3258)删除图像,然后使用sudo docker rmi 70c0e19168cf
    • 小心删除Exit状态的图片。如果您使用的是仅限数据卷的容器,它们不会继续运行。
    • awk 可以grep:awk '/Exit/ {print $1}'
    • 你的命令抛出这个Error response from daemon: No such container: ...。很难说必须更换什么,我应该更换什么。不要使用...
    【解决方案3】:

    错误的原因是即使图像没有任何标签,仍然存在在该图像上创建的容器,该容器可能处于exited 状态。因此,您需要确保已停止并删除在这些映像上创建的所有容器。以下命令可帮助您删除所有未运行的容器:

    docker rm `docker ps -aq --no-trunc --filter "status=exited"`
    

    现在这会删除所有悬空的非中间&lt;none&gt; 图像:

    docker rmi `docker images --filter 'dangling=true' -q --no-trunc`
    

    注意:停止所有正在运行的容器:

    docker stop `docker ps -q`
    

    【讨论】:

    • 谢谢你,我发现这是最干净的实现。
    • 如果您有数据卷容器,请小心,因为它们具有“status=exited”。这意味着您将丢失所有数据。
    【解决方案4】:

    图像当前可能被正在运行的容器使用,因此您首先必须停止并移除容器。

    docker stop <container-name>
    docker rm <container-id>
    

    然后你可以尝试删除图像:

    docker rmi <image-id>
    

    您必须确保此图像不依赖于其他图像(否则您必须先删除它们)。

    我遇到了一个奇怪的情况,我没有更多的容器仍然活着(docker ps -a 没有返回任何内容)但我无法删除图像及其图像依赖项。

    要解决这些特殊情况,您可以使用以下命令强制删除图像:

    docker rmi -f <image-id>
    

    【讨论】:

      【解决方案5】:

      在 Bash 中:

      for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done
      

      这将删除名称为“”的所有图像。我发现那些图像是多余的。

      【讨论】:

      • 这并不能回答问题,但它仍然非常有用。谢谢。
      • 让这个命令简单docker images|grep \&lt;none\&gt;|awk '{print $3}' | xargs docker rmi,可能需要sudo权限
      【解决方案6】:

      我在这个命令中找到了答案:

      docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi
      

      当我删除一些正在使用的图像时遇到了你的问题,我没有意识到(使用docker ps -a)。

      【讨论】:

        【解决方案7】:

        从 Docker 版本开始。 1.13.0(2017 年 1 月)有 system prune 命令:

        $ docker system prune --help
        
        Usage:  docker system prune [OPTIONS]
        
        Remove unused data
        
        Options:
        -a, --all     Remove all unused images not just dangling ones
        -f, --force   Do not prompt for confirmation
            --help    Print usage
        

        【讨论】:

          【解决方案8】:

          除了Sunny的回答:

          要在 PowerShell 窗口中删除 Windows 机器(使用 Docker for Windows)上的所有图像,请执行以下操作:

          docker images -q | %{docker rmi -f $_}
          

          要在 PowerShell 窗口中删除 Windows 机器(使用 Docker for Windows)上的所有容器,请执行以下操作:

          docker ps -a -q | %{docker rm -f $_}
          

          【讨论】:

            【解决方案9】:

            您只需在命令末尾添加--force。喜欢:

            sudo docker rmi <docker_image_id> --force
            

            要使其更智能,您可以添加为:

            首先停止所有正在运行的容器。

            sudo docker stop $(docker ps | grep &lt;your_container_name&gt; | awk '{print $1}')

            现在移除容器

            sudo docker rm $(docker ps | grep &lt;your_container_name&gt; | awk '{print $1}')

            现在作为最后一步,删除 docker 映像

            sudo docker rmi $(docker images | grep &lt;your_image_name&gt; | awk '{print $3}') --force

            docker ps 中的 $1 是第一列,即 Docker 容器 ID。

            docker images $3 是第三列,即 Docker 镜像 ID。

            注意:在上述命令中使用sudo 以防您可能/可能没有执行命令的权限。如果它给你错误,请尝试删除sudo

            【讨论】:

              【解决方案10】:

              首先,使用以下命令删除所有容器

              sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
              

              然后,使用以下命令按 ID 删除图像

              sudo docker rmi <image-id>
              

              【讨论】:

              • 值得注意的是,如果这对某些人来说并不明显,这将删除所有正在运行的 Docker 容器。
              【解决方案11】:

              您必须先停止/删除在该图像上创建的所有不必要的容器。

              看看:How to remove old Docker containers.

              之后使用@marcell 解决方案。

              【讨论】:

                【解决方案12】:

                移除所有容器

                docker ps -q -a | xargs docker rm
                

                强制删除所有 Docker 镜像

                docker rmi -f $(docker images -f dangling=true -q)
                

                【讨论】:

                  【解决方案13】:

                  删除所有未标记图像的命令的最简洁版本是:

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

                  【讨论】:

                    【解决方案14】:

                    要删除一些 Docker 映像,您必须执行以下命令:

                    $ docker rmi <docker_image_id>
                    

                    所以,要删除所有 Docker 镜像,您可以执行以下命令:

                    $ docker rmi $(docker images -q)
                    

                    现在,如果要删除所有 Docker 镜像(包括正在使用的镜像),可以添加标志 -f,例如:

                    $ docker rmi -f $(docker images -q)
                    

                    【讨论】:

                      【解决方案15】:

                      使用

                      docker image prune -all
                      

                      docker image prune -a
                      

                      删除所有悬空图像。如果指定了-a,它也会删除所有未被任何容器引用的图像。

                      注意:在修剪删除任何内容之前,系统会提示您确认,但不会向您显示可能被删除的内容的列表。此外,docker image ls 不支持负过滤,因此很难预测实际会删除哪些图像。

                      Docker's documentation for prune 中所述。

                      【讨论】:

                        【解决方案16】:

                        如果您想自动/定期清理退出的容器并删除正在运行的容器未使用的镜像和卷,您可以下载 Docker 镜像meltwater/docker-cleanup

                        这样你就不需要手动清理了。

                        只要运行:

                        docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest
                        

                        它将每 30 分钟运行一次(或者无论您使用 DELAY_TIME=1800 选项设置多长时间)并清理退出的容器和图像。

                        更多详情:https://github.com/meltwater/docker-cleanup/blob/master/README.md

                        【讨论】:

                          【解决方案17】:

                          我找到了一个可以为我完成的 Powershell 脚本解决方案。

                          脚本首先停止所有容器,而不是删除所有容器,然后删除用户命名的图像。

                          看这里http://www.devcode4.com/article/powershell-remove-docker-containers-and-images

                          【讨论】:

                            猜你喜欢
                            • 2022-12-26
                            • 1970-01-01
                            • 2017-11-30
                            • 2020-11-14
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-03-23
                            • 2017-08-04
                            • 1970-01-01
                            相关资源
                            最近更新 更多