ChatGPT解决这个技术问题 Extra ChatGPT

Docker:如何删除所有本地 Docker 镜像

我最近开始使用 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

S
Steve Chambers

Unix

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

docker rm -vf $(docker ps -aq)

要删除所有图像,

docker rmi -f $(docker images -aq)

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

视窗-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次。感谢您写下这个答案!
@泰坦,谢谢。已编辑。我没有办法在windows中测试,应该多注意评论。
R
Robert

使用它来删除所有内容:

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 后才被回收
S
Suhas_Pote

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

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

docker system prune

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

docker system prune -a

有关详细信息,请访问 link


如果我们能避免重复回答就好了。
如另一个答案中所述, --volumes 还需要在修剪过程中包含卷。
R
Robert Ranjan

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

D
Deep Nirmal

简单方便的命令

删除所有图像

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
这意味着它已经删除了这些图像。再次检查
V
VasiliNovikov

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

rm -rf /var/lib/docker

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


还有 docker 基础设施文件。我不会那样做。
@TuncayGöncüoğlu “码头基础设施文件”是什么意思? /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
G
Guido

有一个 bug in Windows,其中删除映像后磁盘空间未回收。重新启动 Docker / Windows 不起作用。

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

https://i.stack.imgur.com/IdHxm.png

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


M
MD SHAYON

列出图像

docker image ls

删除未使用的图像

docker image prune --all

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

docker system prune -a

know more


h
hassan

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

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

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

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

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

P
PalFS

要删除所有图像:

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

解释:

码头工人图像-a | awk {'打印 $3'}

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


-q 也只打印 ID
m
mirageglobe

要删除所有图像:

docker rmi $(docker images -a -q)

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

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

docker system prune

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


该命令还将删除您可能仍在使用的卷。
未知速记标志:-a 中的“a”参见“docker rmi --help”。
s
sdgfsdh
docker rmi $(docker images -q) --force

在帖子上留下答案时,您应该添加一些解释,以便以后找到它的其他人可以理解。
B
Bablu Ahmed

你可以这样尝试:

docker system prune

就我而言,这将删除我仍在使用的卷。如果您不知道它的作用,请不要使用它
'awk' 不是内部或外部命令、可运行程序或批处理文件。
T
Tomer Shetah

sudo docker images / docker images // 带有 id 的图像列表 sudo docker rm image / docker rm image


O
OneCricketeer

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

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

'xargs' 不是内部或外部命令、可运行程序或批处理文件。
D
De Bonheur

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


c
corvo

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

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

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

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


D
Debasis Das

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

第 1 步:泊坞窗图像(列出所有带有 id 的泊坞窗图像)

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

第 2 步:泊坞窗图像 rm 31e522c6cfe4(图像 ID)

      OUTPUT : image deleted

R
Raghav

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

echo "删除容器:" && if [ -n "$(docker container ls -aq)" ];然后 docker container stop $(docker container ls -aq);码头集装箱 rm $(码头集装箱 ls -aq);菲; echo "删除图像:" && if [ -n "$(docker images -aq)" ];然后 docker rmi -f $(docker images -aq);菲; echo "删除卷:" && if [ -n "$(docker volume ls -q)" ];然后是 docker volume rm $(docker volume ls -q);菲; echo "删除网络:" && if [ -n "$(docker network ls | awk '{print $1" "$2}' | grep -v 'ID|bridge|host|none' | awk '{print $1}') " ];然后 docker network rm $(docker network ls | awk '{print $1" "$2}' | grep -v 'ID|bridge|host|none' | awk '{print $1}');菲;


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

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


S
Suraj Rao
docker rmi -f $(docker images -q)

P
Parvinder Kumar
docker images -f dangling=true
docker image prune