如何自动删除 7 天前创建的 docker 镜像?

Posted

技术标签:

【中文标题】如何自动删除 7 天前创建的 docker 镜像?【英文标题】:How to remove docker images which created 7 days ago automatically? 【发布时间】:2018-11-17 02:56:49 【问题描述】:

有没有办法删除几天前构建的 docker 镜像?

如果我们检查docker images,将会得到:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE

存在一个CREATED 项目。

从official document搜索,没有找到那个选项。

【问题讨论】:

【参考方案1】:

docker image prune 提供过滤器以在特定日期之前删除图像:

docker image prune -a --filter "until=$(date +'%Y-%m-%dT%H:%M:%S' --date='-15 days')"

【讨论】:

或者这样:docker images --filter=reference='myregistry/myrepo*' | grep "7 days ago" | awk 'print $3' | xargs docker image rm @vv,上面的命令只会删除7 days旧的图像。超过 7 天的图像仍然存在,因此此解决方案不是原始问题的答案。【参考方案2】:

您可以告诉 docker image prune 删除任何早于给定小时数的图像,在您的情况下:7 * 24h= 168h。

docker image prune -a --force --filter "until=168h"

使用 --force 选项,不会有任何提示,因此可以轻松地将其添加到 crontab 以每天运行。

为此,请在编辑模式 (crontab -e) 下打开 crontab,并添加以下行以在每天凌晨 1 点运行此命令。

0 1 * * * docker image prune -a --force --filter "until=168h"

【讨论】:

虽然我喜欢 Docker 的过滤功能,但我很失望 until 的逻辑否定不支持(例如,since 关键字)。 IMO 有点半途而废。 @will 对吗?人们一直在为一次性和探索性目的启动 docker 容器,并希望在此后不久将它们丢弃,但 docker 仍然假设 - 愚蠢的 IMO - 你总是想丢弃最旧的容器,或者只是你喜欢手动创建一个长列表要手动丢弃的 ID。【参考方案3】:

https://docs.docker.com/engine/reference/commandline/image_prune/

docker image prune -a --force --filter "until=240h"

【讨论】:

以上是关于如何自动删除 7 天前创建的 docker 镜像?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过命令行从docker hub删除docker镜像?

linux系统如何自动删除几天前文件夹

linux自动删除7天前的文件

腾讯云CentOS 7.6 64位之docker的镜像和容器练习

Windows自动删除7天前的文件

Windows自动删除n天前的文件的批处理脚本