当前位置: 首页 > 面试题库 >

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

张卓
2023-03-14
问题内容

长时间运行Docker时,系统中有很多映像。如何安全地一次删除所有未使用的Docker映像以释放存储空间?

另外,我还想删除几个月前拉出的具有正确图像TAG

因此,我并不是要仅删除未标记的图像。我正在寻找一种删除常规未使用图像的方法,其中包括未标记的图像和其他图像,例如几个月前使用正确的图像拉出的图像TAG


问题答案:

2016年9月更新:Docker 1.13:PR

26108和commit
86de7c0
引入了一些新命令,以帮助实现可视化docker守护程序数据在磁盘上占用了多少空间,并允许轻松清除“不需要的”多余空间。

docker system prune
将删除所有悬空数据(即,顺序:容器停止,无容器的卷和无容器的映像)。甚至带有-a选项的未使用数据。

您还有:

  • docker container prune
  • docker image prune
  • docker network prune
  • docker volume prune

对于 未使用的 图像,请使用docker image prune -a(用于删除悬空 使用的图像)。
警告:“ 未使用 ”表示“没有任何容器引用的图像”:使用之前请小心-a

如AL的答案所示,dockersystem prune --all将删除所有 未使用的 图像,而不仅仅是悬空的图像……这可能有点过多。

docker xxx prune与该--filter选项结合使用可能是一种限制修剪的好方法(docker
SDK API 1.28最低,因此docker 17.04+)

当前支持的过滤器是:

  • until (<timestamp>) -仅删除在给定时间戳记之前创建的容器,图像和网络
  • labellabel=<key>label=<key>=<value>label!=<key>,或label!=<key>=<value>) -仅与除去容器,图像,网络,和卷(或 没有 ,如果label!=...被使用)指定的标签。

有关示例,请参见“ 修剪图像 ”。

原始答案(2016年9月)

我通常这样做:

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

我有一个别名来删除那些[悬挂的图像]
13:drmi

dangling=true过滤器发现未使用的图像

这样,将删除不再由标记图像引用的任何中间图像。

首先
对退出的进程(容器)执行相同的操作

alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'

正如haridsv:

从技术上讲, 您应该在清理图像之前先清理容器,因为这样可以捕获更多的晃动图像并减少错误

Jess
Frazelle(jfrazelle)具有bashrc函数

dcleanup(){
    docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
    docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}

要删除旧图像,而不仅仅是“未引用悬挂”图像,可以考虑 docker- gc

一个简单的Docker容器和图像垃圾收集脚本。

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


 类似资料:
  • 在长期运行Docker时,系统中会出现大量的图像。我如何删除所有未使用的Docker映像一次安全释放存储? 此外,我还想移除几个月前拉出的图像,这些图像具有正确的。

  • 问题内容: 此问题与我是否应该担心多余的,未运行的Docker容器有关?。 我想知道如何删除旧容器。将让你删除一个,但我有很多了。没有提供选择选项(如全部,或按图像名称)。 也许有一个存储这些容器的目录,可以方便地手动删除它们? 问题答案: 从Docker 1.13.x开始, 您可以使用Docker容器prune: 这将删除所有停止的容器,并且应在所有平台上以相同的方式工作。 还有一个Docker

  • 问题内容: 我有以下图像: 当我尝试删除其中之一时,我得到: 如何删除它们?为什么会有这样的冲突? 问题答案: 为了删除所有图像,请使用给定命令 为了删除所有容器,请使用给定命令 警告:这将破坏您的所有图像和容器。 将无法还原它们! 该解决方案由Techoverflow.net提供。

  • 我使用创建容器。 现在我要删除此图像中的卷。 我该怎么办?

  • (F.Y.I.我已经在互联网上搜索了很多文档。我正在使用storm-0.10.0-beta1。storm中log4j2的配置文件是worker.xml) 现在,我尝试使用log4j2。 我正在寻找删除旧日志的方法,但我找不到。部分配置如下。 起初,我期望删除超过3天的日志文件。 但事实上,事实并非如此。 所以,我想知道是否有办法删除旧日志。 如果有一条路我还没有找到,请通知我。

  • 问题内容: 我最近开始使用Docker,但从未意识到我应该使用代替或摆脱我的实验。我现在在本地有大量不需要的docker映像。 我是否可以运行一个标志来删除所有本地docker映像和容器? 像--all标志这样的东西并不存在,但是我正在寻找具有类似想法的东西。 问题答案: 要删除所有容器(包括其卷), 要删除所有图像, 请记住,您应先删除所有容器,然后再删除创建这些容器所用的所有图像。 如果您使用