我最近开始使用Docker,从未意识到我应该使用Docker compose down而不是ctrl-c或Docker composestop来摆脱我的实验。我现在在本地有大量不需要的docker图像。
我是否可以运行一个标志来删除所有本地docker图像和容器?
类似docker rmi-all-force-all-flag的东西不存在,但我正在寻找具有类似想法的东西。
我最近开始使用Docker,从未意识到我应该使用Docker compose down而不是ctrl-c或Docker composestop来摆脱我的实验。我现在在本地有大量不需要的docker图像。
我是否可以运行一个标志来删除所有本地docker图像和容器?
类似docker rmi-all-force-all-flag的东西不存在,但我正在寻找具有类似想法的东西。
当前回答
docker图像rm-f$(docker图像ls-a-q)
其他回答
如果需要在不调用docker的情况下删除:
rm -rf /var/lib/docker
这将直接从文件系统中删除所有docker映像/容器/卷。
docker image prune -a
删除所有未使用的图像,而不仅仅是悬挂的图像。将-f选项添加到武力
本地docker版本:17.09.0-ce,Gitcommit: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
其他答案似乎不能提供一种简单的方法来删除带有“自动生成”名称的容器。这是我最常见的意图,所以我为它编写了一个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,并在实际执行删除之前检查列表。
对于Linux Ubuntu用户,下面对我有用。注意事项-它将删除所有内容。
要删除容器及其关联的卷,请使用以下方法:
sudo docker rm -vf $(sudo docker ps -a -q)
要删除图像,请使用以下内容:
sudo docker rmi -f $(sudo docker images -a -q)
Windows中存在一个错误,即删除映像后无法回收磁盘空间。重新启动Docker/Windows不起作用。
如果您使用的是Docker Desktop,以下方法对我有效。请转到疑难解答->清理/清除数据。这可以为您节省大量磁盘空间,可能比您想要的更多。
请注意:这会删除所有内容,因此在执行此操作之前请三思!