我最近开始使用 Docker,但从未意识到我应该使用 docker-compose down
而不是 ctrl-c
或 docker-compose stop
来摆脱我的实验。我现在在本地有大量不需要的 docker 镜像。
我可以运行一个标志来删除所有本地 docker 图像和容器吗?
像 docker rmi --all --force
--all 标志这样的东西不存在,但我正在寻找具有类似想法的东西。
docker images purge
-->将删除所有 docker 图像
docker image ls -q | xargs -I {} docker image rm -f {}
docker image prune
(图像是单数,它是修剪而不是清除)。
docker image prune --all --force
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
使用它来删除所有内容:
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
这是我使用的简短快速的解决方案
Docker 提供了一个命令来清理任何悬空的(不与容器关联的)资源——镜像、容器、卷和网络:
docker system prune
要另外删除任何停止的容器和所有未使用的图像(不仅仅是悬空图像),请在命令中添加 -a 标志:
docker system prune -a
有关详细信息,请访问 link
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
简单方便的命令
删除所有图像
docker rmi $(docker images -a)
删除处于退出状态的容器
docker rm $(docker ps -a -f status=exited -q)
删除处于创建状态的容器
docker rm $(docker ps -a -f status=created -q)
注意:删除所有容器,然后删除图像
如果您需要在不调用 docker 的情况下删除:
rm -rf /var/lib/docker
这会直接从文件系统中删除所有 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
systemctl stop docker
有一个 bug in Windows,其中删除映像后磁盘空间未回收。重新启动 Docker / Windows 不起作用。
如果您使用的是 Docker Desktop,following 对我有用。转到疑难解答->清理/清除数据。这可以为您节省大量磁盘空间,可能比您想要的更多。
https://i.stack.imgur.com/IdHxm.png
请注意:这会删除所有内容,因此请三思而后行!
列出图像
docker image ls
删除未使用的图像
docker image prune --all
额外删除所有停止的容器和所有未使用的图像
docker system prune -a
对于 Linux Ubuntu 用户,以下对我有用。警告词-它会顺便删除。
要删除容器以及与之关联的卷,请使用以下命令:
sudo docker rm -vf $(sudo docker ps -a -q)
对于删除图像,请使用以下内容:
sudo docker rmi -f $(sudo docker images -a -q)
要删除所有图像:
docker rmi -f $(docker images -a | awk {'print $3'})
解释:
码头工人图像-a | awk {'打印 $3'}
此命令将返回所有图像 ID,然后用于使用其 ID 删除图像。
-q
也只打印 ID
要删除所有图像:
docker rmi $(docker images -a -q)
其中 -a 是全部,-q 只返回图像 ID
要删除未使用的图像和容器:
docker system prune
请注意,如果您正在使用 docker swarm,并且您的本地计算机正在加入远程 swarm(作为经理/工作人员),那么您的本地将是部署的 repo。因此,执行此操作会删除已部署的图像。
docker rmi $(docker images -q) --force
你可以这样尝试:
docker system prune
sudo docker images / docker images // 带有 id 的图像列表 sudo docker rm image
xargs
的另一种方式(仅限 Unix)
docker image ls -q | xargs -I {} docker image rm -f {}
docker image rm -f $(docker image ls -a -q)
添加到 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。
要删除所有 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
这是我使用的命令并将其放入批处理文件以删除所有内容:
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}');菲;
其他答案似乎没有提供一种简单的方法来删除具有“自动生成”名称的容器。这是我最常见的意图,因此我为它编写了一个 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)
docker images -f dangling=true
docker image prune
unknown shorthand flag: 'a' in -a
运行时docker rmi -f $(docker images -a -q)
docker images -a -q | % { docker image rm $_ -f }