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

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

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


Unix

为了删除包括其卷使用在内的所有容器,

docker rm -vf $(docker ps -aq)

为了删除所有图像,

docker rmi -f $(docker images -aq)

请记住,在删除创建这些容器的所有图像之前,应先删除所有容器。

Windows-Powershell

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

Windows-命令行

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

使用此选项可删除所有内容:

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-说明


docker image prune -a

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

本地docker版本:17.09.0-ce,Gitcommit: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

要删除所有图像,请执行以下操作:

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

说明:

docker图像-a|awk{'打印$3'}

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


简单方便的命令

删除所有图像

docker rmi $(docker images -a)

删除处于退出状态的容器

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

删除处于已创建状态的容器

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

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


您可以这样尝试:

docker system prune

要删除所有图像,请执行以下操作:

docker rmi $(docker images -a -q)

其中-a是all,-q是仅返回图像id

要删除未使用的图像和容器,请执行以下操作:

docker system prune

注意,如果您正在使用dockerswarm,并且您的本地机器正在加入远程swarm(作为管理员/工作人员),那么您的本地将是部署的repo。执行此操作从而移除部署的图像。


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

rm -rf /var/lib/docker

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


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

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

for/F“delims=”('docker ps-A-q')中的%A做docker rm%A

这里,docker ps-a-q命令列出了所有图像,并将此列表逐一传递给docker rm

有关此类命令格式如何在windowscmd中工作的更多详细信息,请参阅本文。


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

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

要删除所有Docker本地Docker镜像,请执行以下两个步骤:

步骤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

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

Docker提供了一个单独的命令,它将清理所有悬空(与容器无关)的资源(图像、容器、卷和网络):

docker system prune

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

docker system prune -a

有关详细信息,请访问链接


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

echo“正在删除容器:”&&if[-n“$(docker container ls-aq)”]; 然后docker容器stop$(docker容器ls-aq);码头装卸工集装箱rm$(码头集装箱ls-aq);fi;echo“正在删除图像:”&&如果[-n“$(docker images-aq)”];然后docker rmi-f$(docker图像-aq);fi;echo“正在删除卷:”&&if[-n“$(docker volumels-q)“];然后docker volume rm$(docker volume ls-q;fi;echo“正在删除网络:”&&if[-n“$(docker network ls|awk”{print$1“”$2}‘|grep-v‘ID|bridge|host|none‘|awk‘{print$1}’)“];然后docker网络rm$(docker网络ls | awk“{print$1”“$2}”|grep-v“ID|bridge|host|none”|awk“{print$1}”);fi;


sudo docker images/docker images//带id的图像列表sudo docker rm image<image_id>/docker rm image<image_id>


Windows中存在一个错误,即删除映像后无法回收磁盘空间。重新启动Docker/Windows不起作用。

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

请注意:这会删除所有内容,因此在执行此操作之前请三思!


其他答案似乎不能提供一种简单的方法来删除带有“自动生成”名称的容器。这是我最常见的意图,所以我为它编写了一个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,并在实际执行删除之前检查列表。


docker rmi -f $(docker images -q)

对于Linux Ubuntu用户,下面对我有用。注意事项-它将删除所有内容。

要删除容器及其关联的卷,请使用以下方法:

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

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

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

docker图像rm-f$(docker图像ls-a-q)


docker images -f dangling=true
docker image prune

检查码头集装箱体积

码头系统df

修剪所有图像和卷

docker prune--全部


删除所有图像,但至少有一个容器与其关联

$ docker images prune -a

要获取图像的所有名称:docker-images-a-q,并在同一行中使用此命令删除所有图像。

docker image rmi $(docker images -a -q)

如果您将图像附加到至少一个正在运行的容器,最好先停止它们。

要删除10天前(240小时)创建的图像,请执行以下操作:

$ docker images prune -a --force --filter "until=240h"

可以使用以下命令进行验证:

$  docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'

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

docker系统prune-a


仅删除所有图像,然后运行以下命令

docker rmi -f $(docker images -aq) 

删除未使用的容器、映像和卷,然后运行以下命令

docker system prune -a -f