【问题标题】:Docker: How to delete all local Docker imagesDocker:如何删除所有本地 Docker 镜像
【发布时间】:2017-11-30 19:41:31
【问题描述】:

我最近开始使用 Docker,但从未意识到我应该使用 docker-compose down 而不是 ctrl-cdocker-compose stop 来摆脱我的实验。我现在在本地有大量不需要的 docker 镜像。

我可以运行一个标志来删除所有本地 docker 图像和容器吗?

docker rmi --all --force --all 之类的标志不存在,但我正在寻找具有类似想法的东西。

【问题讨论】:

  • docker images purge --> 将删除所有 docker 镜像
  • 带 xargs:docker image ls -q | xargs -I {} docker image rm -f {}
  • @muthukumarhelius 我想你的意思是docker image prune(图像是单数,它是修剪而不是清除)。
  • docker image prune --all --force

标签: docker docker-compose


【解决方案1】:

适用于 Unix

要删除所有容器,包括其使用的卷,

docker rm -vf $(docker ps -aq)

要删除所有图像,

docker rmi -f $(docker images -aq)

请记住,您应该先删除所有容器,然后再删除创建这些容器的所有映像。

适用于 Windows

如果您使用的是 Windows (Powershell),

$images = docker images -a -q
foreach ($image in $images) { docker image rm $image -f }

基于 CodeSix 的评论,Windows Powershell 的一个内衬,

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

对于使用命令行的 Windows,

for /F %i in ('docker images -a -q') do docker rmi -f %i

【讨论】:

  • unknown shorthand flag: 'a' in -a 运行时docker rmi -f $(docker images -a -q)
  • @Ashutosh Chamoli:在 CMD 中不起作用,在 PowerShell 中起作用。
  • powershell 的单行变体:docker images -a -q | % { docker image rm $_ -f }
  • 我一定来过这里 100 次。感谢您写下这个答案!
  • @Titan,谢谢。已编辑。没有办法在windows下测试,应该多注意评论。
【解决方案2】:

使用它删除所有内容

docker system prune -a --volumes

删除所有未使用的容器、卷、网络和图像

WARNING! This will remove:
    - all stopped containers
    - all networks not used by at least one container
    - all volumes not used by at least one container
    - all images without at least one container associated to them
    - all build cache

https://docs.docker.com/engine/reference/commandline/system_prune/#extended-description

【讨论】:

  • 实际上并没有回收所有磁盘空间。
  • @lucian303 这种方法确实回收了磁盘空间。也许你正面临一个特定的问题。
  • 只有当我这样做@techtabu 的回答中的步骤时,我似乎才能得到想要的结果
  • 未知标志:--volumes
  • @lucian303 在我的情况下,空间仅在重新启动 docker 后才被回收
【解决方案3】:

这是我使用的简短快速的解决方案

Docker 提供了一个命令来清理任何悬空的(与容器无关的)资源——镜像、容器、卷和网络:

docker system prune

要另外删除任何已停止的容器和所有未使用的图像(不仅仅是悬空图像),请在命令中添加 -a 标志:

docker system prune -a


更多详情请访问link

【讨论】:

  • 如果我们能避免重复回答就好了。
【解决方案4】:

docker image prune -a

删除所有未使用的图像,而不仅仅是悬空的图像。将-f 选项添加到 力。

本地 docker 版本:17.09.0-ce,Git 提交:afdb6d4,OS/Arch:darwin/amd64

$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=<timestamp>')
  -f, --force           Do not prompt for confirmation
      --help            Print usage

【讨论】:

    【解决方案5】:

    简单方便的命令

    删除所有图片

    docker rmi $(docker images -a)
    

    删除处于退出状态的容器

    docker rm $(docker ps -a -f status=exited -q)
    

    删除处于创建状态的容器

    docker rm $(docker ps -a -f status=created -q)
    

    注意:删除所有容器,然后删除图像

    【讨论】:

    • 删除所有图像,应该是-“docker rmi $(docker images -a -q)”。 -q 仅返回图像 ID
    • 这意味着它已经删除了这些图像。再次检查
    【解决方案6】:

    如果你需要在不调用docker的情况下删除

    rm -rf /var/lib/docker
    

    这会直接从文件系统中删除所有 docker 镜像/容器/卷。

    【讨论】:

    • 还有 docker 基础设施文件。我不会那样做。
    • @TuncayGöncüoğlu “docker 基础设施文件”是什么意思? /etc/docker 中的设置不受影响
    • ERROR: failed to update bridge store for object type *bridge.networkConfiguration: open /var/lib/docker/network/files/local-kv.db: no such file or directory
    • @ravi docker 可能需要先停止,例如systemctl stop docker
    【解决方案7】:

    删除所有图像:

    docker rmi -f $(docker images -a | awk {'print $3'})
    

    解释:

    泊坞窗图像-a | awk {'打印 $3'}

    此命令将返回所有图像 id,然后用于使用其 id 删除图像。

    【讨论】:

    • -q 也只打印ID
    【解决方案8】:
    docker rmi $(docker images -q) --force
    

    【讨论】:

    • 在帖子上留下答案的时候应该加上一些解释,以便以后找到它的人可以理解。
    【解决方案9】:

    列出图片

    docker image ls
    

    删除未使用的图像

    docker image prune --all
    

    另外删除所有停止的容器和所有未使用的图像

    docker system prune -a
    

    know more

    【讨论】:

      【解决方案10】:

      你可以这样试试:

      docker system prune
      

      【讨论】:

      • 在我的情况下,这将删除我仍在使用的卷。如果您不知道它的作用,请不要使用它
      • 'awk' 不是内部或外部命令、可运行程序或批处理文件。
      【解决方案11】:

      删除所有图像:

      docker rmi $(docker images -a -q)
      

      其中 -a 是全部,-q 是只返回图像 ID

      删除未使用的图像和容器:

      docker system prune
      

      请注意,如果您正在使用 docker swarm,并且您的本地机器正在加入远程 swarm(作为经理/工作人员),那么您的本地机器将成为部署的仓库。因此,执行此操作会删除已部署的图像。

      【讨论】:

      • 该命令也会删除您可能仍在使用的卷。
      • 未知速记标志:'a' in -a 请参阅'docker rmi --help'。
      【解决方案12】:
      1. sudo docker images / docker images // 带有 id 的图像列表
      2. sudo docker rm image &lt;image_id&gt; / docker rm image &lt;image_id&gt;

      【讨论】:

        【解决方案13】:

        有一个bug in Windows 在删除图像后没有回收磁盘空间。重新启动 Docker / Windows 不起作用。

        如果您使用的是 Docker Desktop,following 对我有用。转到疑难解答 -> 清理/清除数据。这可以为您节省大量磁盘空间,可能比您想要的更多。

        请注意:这会删除所有内容,因此请三思而后行!

        【讨论】:

          【解决方案14】:

          xargs 的另一种方式(仅限 Unix)

          docker image ls -q | xargs -I {} docker image rm -f {}
          

          【讨论】:

          • 'xargs' 不是内部或外部命令、可运行程序或批处理文件。
          【解决方案15】:

          对于 Linux Ubuntu 用户,以下对我有用。警告词 - 它会顺便删除。

          要删除容器以及与之关联的卷,请使用以下命令:

          sudo docker rm -vf $(sudo docker ps -a -q)
          

          要删除图像,请使用以下内容:

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

          【讨论】:

            【解决方案16】:

            docker image rm -f $(docker image ls -a -q)

            【讨论】:

              【解决方案17】:

              添加到 techtabu 接受的答案,如果你在 windows 上使用 docker,你可以使用以下命令

              for /F "delims=" %A in ('docker ps -a -q') do docker rm %A

              这里,命令docker ps -a -q列出了所有的图像,这个列表被一一传递给docker rm

              请参阅this,了解有关此类命令格式如何在 windows cmd 中工作的更多详细信息。

              【讨论】:

                【解决方案18】:

                要删除所有 Docker 本地 Docker 映像,请执行 2 个步骤 ::

                第 1 步:docker 镜像(列出所有带 id 的 docker 镜像)

                     example :
                     REPOSITORY    TAG    IMAGE ID            CREATED             SIZE
                     pradip564/my  latest 31e522c6cfe4        3 months ago        915MB
                

                第 2 步:docker image rm 31e522c6cfe4(图像 ID)

                      OUTPUT : image deleted
                

                【讨论】:

                  【解决方案19】:

                  这是我使用的命令并将其放入批处理文件以删除所有内容:

                  echo "删除容器:" && if [ -n "$(docker container ls -aq)" ];然后 docker container stop $(docker container ls -aq);码头工人 容器 rm $(docker 容器 ls -aq);菲;回声“删除图像:” && if [ -n "$(docker images -aq)" ];然后 docker rmi -f $(docker 图像-aq);菲; echo "删除卷:" && if [ -n "$(docker volume ls -q)" ]; 然后是 docker volume rm $(docker volume ls -q); fi; echo "删除网络:" && if [ -n "$(docker network ls | awk '{print $1" "$2}' | grep -v 'ID|网桥|主机|无' | awk '{print $1}')" ]; 然后 docker network rm $(docker network ls | awk '{print $1" "$2}' | grep -v 'ID|网桥|主机|无' | awk '{print $1}');菲;

                  【讨论】:

                  • 这看起来是一个不错的命令,但作为一个人类更容易以 shell 脚本形式同化,然后也可以进行版本控制:)
                  【解决方案20】:

                  其他答案似乎没有提供一种简单的方法来仅删除具有“自动生成”名称的容器。这是我最常见的意图,所以我为此编写了一个 Powershell 脚本:

                  $containers = (docker container list -a).Split("`n") | % { [regex]::split($_, "\s+") | Select -Last 1 }
                  $containersToRemove = $containers | Where { ([regex]"^[a-z]+_[a-z]+$").IsMatch($_) }
                  
                  # it's recommended to delete in batches, as too many at once can cause issues
                  $containersToRemove = $containersToRemove | Select-Object -First 30
                  
                  foreach ($container in $containersToRemove) {
                      # sync/wait-based version (slow)
                      # docker container rm $container
                  
                      # async/background-process version (fast)
                      Start-Process -FilePath docker -ArgumentList "container rm $container" -NoNewWindow
                  }
                  

                  当然要小心,因为这个脚本只是使用正则表达式:^[a-z]+_[a-z]+$

                  所以只有当你知道你关心的容器不使用相同的格式(小写单词、下划线、小写单词)时才使用它;或者至少只运行前两行,运行echo $containersToRemove,并在实际执行删除之前检查列表。

                  【讨论】:

                    【解决方案21】:
                    docker rmi -f $(docker images -q)
                    

                    【讨论】:

                      猜你喜欢
                      • 2022-12-26
                      • 2014-02-19
                      • 1970-01-01
                      • 2018-09-14
                      • 2018-08-28
                      • 1970-01-01
                      • 2020-11-14
                      • 2017-08-04
                      • 2019-12-05
                      相关资源
                      最近更新 更多