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

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

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


当前回答

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

其他回答

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

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

说明:

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

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

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

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

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

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

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

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

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的情况下删除:

rm -rf /var/lib/docker

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