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

Posted

技术标签:

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

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

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

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

【问题讨论】:

相关:How to remove old and unused Docker images. docker images purge --> 将删除所有 docker 镜像 带 xargs:docker image ls -q | xargs -I docker image rm -f @muthukumarhelius 我想你的意思是docker image prune(图像是单数,它是修剪而不是清除)。 docker image prune --all --force 【参考方案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】:
    sudo docker images / docker images // 带有 id 的图像列表 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)

【讨论】:

以上是关于Docker:如何删除所有本地 Docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

如何删除运行的docker镜像

docker 删除镜像

Docker命令

如何将本地docker 镜像上传到我的私有仓库

docker 镜像

Docker 基本使用