Docker:如何删除所有本地 Docker 镜像
Posted
技术标签:
【中文标题】Docker:如何删除所有本地 Docker 镜像【英文标题】:Docker: How to delete all local Docker images 【发布时间】:2017-11-30 19:41:31 【问题描述】:我最近开始使用 Docker,但从未意识到我应该使用 docker-compose down
而不是 ctrl-c
或 docker-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 <image_id>
/ docker rm image <image_id>
【讨论】:
【参考方案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 镜像的主要内容,如果未能解决你的问题,请参考以下文章