如何删除匹配指定项目名的Docker镜像,仅保留最新3个?
解决方案:Docker镜像清理(保留最新3个/按时间删除)
一、保留最新3个镜像的实现方式
Docker原生的docker image prune命令**不支持直接按“保留最新N个”**的规则筛选,需要通过脚本结合docker image ls的输出处理:
- 先筛选目标仓库的镜像,按创建时间倒序排列,跳过前3个,提取待删除的镜像ID:
docker image ls --filter 'reference=secret.dkr.ecr.eu-central-1.amazonaws.com/d_api*' --format '{{.ID}}' --sort created | tail -n +4
说明:
--sort created按创建时间倒序(最新镜像排在最前),tail -n +4跳过前3个,提取后续所有旧镜像的ID。
- 批量删除这些旧镜像(建议先执行上一步确认输出的ID无误,再执行删除):
docker image rm $(docker image ls --filter 'reference=secret.dkr.ecr.eu-central-1.amazonaws.com/d_api*' --format '{{.ID}}' --sort created | tail -n +4)
如果存在被容器引用的旧镜像,可添加-f参数强制删除,但需提前确认这些容器已不再使用。
二、按时间过滤删除30天以上旧镜像的验证
你猜想的命令格式需要调整,正确的多过滤器写法是用空格分隔多个--filter参数,调整后的可行命令为:
docker image prune -af --filter "reference=secret.dkr.ecr.eu-central-1.amazonaws.com/d_api*" --filter "until=720h"
--filter "reference=xxx":限定只处理目标ECR仓库的镜像--filter "until=720h":筛选创建时间超过720小时(30天)的镜像-a:删除所有未被容器引用的镜像,-f:强制删除无需交互确认
建议先去掉-f参数运行,预览待删除的镜像列表,确认无误后再添加-f执行删除:
docker image prune -a --filter "reference=secret.dkr.ecr.eu-central-1.amazonaws.com/d_api*" --filter "until=720h"
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

