如何删除旧的和未使用的Docker图像

长时间运行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>)-仅删除在给定时间戳之前创建的容器、图像和网络
  • labellabel=<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容器和图像垃圾收集脚本

  • 一个多小时前退出的容器将被移除
  • 移除后不属于任何剩余容器的图像

发表评论