长时间运行Docker时,系统中会出现大量图像。如何一次删除所有未使用的Docker映像以释放存储空间
此外,我还想删除几个月前提取的图像,这些图像具有正确的标记
所以,我不是只要求删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,其中包括未标记的图像和其他图像,如几个月前使用正确的标记拉取的图像
2016年9月更新:Docker 1.13:PR 26108和commit 86de7c0引入了一些新命令,以帮助可视化Docker守护程序数据在磁盘上占用的空间,并允许轻松清理;“不必要的”;过量
docker system prune将删除所有悬空数据(即按顺序:停止容器、没有容器的卷和没有容器的图像)。即使是未使用的数据,也可以使用-a选项
你还有:
docker容器修剪docker图像修剪docker网络修剪docker卷修剪
对于未使用的图像,使用docker image prune-a(用于删除悬挂的和未使用的图像)。
警告:“未使用的”指;未被任何容器引用的图像";:使用-a前要小心
如L的回答所示,docker system prune--all将删除所有未使用的图像,而不仅仅是悬挂的图像。。。这可能有点太多了
将docker xxx prune与--filter选项相结合是限制修剪的好方法(docker SDK API最小值为1.28,因此docker 17.04+)
当前支持的筛选器包括:
直到(<;timestamp>;)-仅删除在给定时间戳之前创建的容器、图像和网络label(label=<;key>;,label=<;key>;,label!=<;key>;,或label!=<;key>;=<;value>;)-仅删除带有指定标签的容器、图像、网络和卷(如果使用了label!=,)
见;剪掉图像“;举个例子
原始答复(2016年9月)
我通常会:
docker rmi$(docker图像——过滤器";悬挂=true";-q——无trunc)
我有一个[用于删除那些悬空图像的别名:drmi]13
dangling=true过滤器查找未使用的图像
这样,任何不再被标记图像引用的中间图像都将被删除
我首先对退出的进程(容器)执行相同的
alias drmae='docker rm$(docker ps-qa-无trunc-过滤器“状态=退出”)
正如haridsv在评论中指出的:
从技术上讲,您应该在清理图像之前先清理容器,因为这样可以捕获更多悬空图像,减少错误
Jess Frazelle(jfrazelle)具有bashrc功能:
dcleanup(){
docker rm-v$(docker ps--筛选器状态=已退出-q 2>;/dev/null)2>;/dev/null
docker rmi$(docker映像--过滤器悬空=true-q 2>;/dev/null)2>;/dev/null
}
删除旧图像,而不仅仅是;“未引用的悬挂”;图像,可以考虑 DOCKER GC/ :
一个简单的Docker容器和图像垃圾收集脚本
- 一个多小时前退出的容器将被移除
- 移除后不属于任何剩余容器的图像