IBM Cloud Container Registry:如何通过CLI批量或全部删除镜像
IBM Cloud 容器镜像仓库批量删除旧镜像方案
1. 前置准备
操作前请先完成IBM Cloud CLI和容器镜像服务插件的登录校验,确保ibmcloud cr命令可正常执行:
- 常规账号登录:
ibmcloud login - 联邦账号登录:
ibmcloud login --sso - 确认插件正常安装:
ibmcloud cr plugin list,输出中存在container-registry插件即可正常操作
2. 全量删除所有镜像的方法
注意:操作前请确认所有镜像均无需留存,删除后无法恢复
直接执行以下命令即可批量删除仓库内所有镜像:
ibmcloud cr images --format '{{.Repository}}:{{.Tag}}' | xargs -L 1 ibmcloud cr image-rm -f
参数说明:
--format参数指定仅输出「仓库名+标签」的镜像唯一标识,过滤无关信息-f参数跳过二次确认提示,直接执行删除- 若需要先确认待删除列表,可先单独执行
ibmcloud cr images --format '{{.Repository}}:{{.Tag}}'查看输出,确认无误后再执行完整删除命令
3. 按存储时长筛选删除(例如删除超过1年的镜像)
3.1 实现逻辑
通过ibmcloud cr images的--json参数拉取所有镜像的元数据,提取创建时间和当前时间做差值比对,筛选出超过指定保留时长的镜像执行删除。
3.2 可直接使用的Shell脚本
以下脚本默认删除存储时长超过365天的镜像,可通过修改RETENTION_DAYS变量自定义保留时长:
#!/bin/bash # 自定义镜像保留天数,默认保留365天 RETENTION_DAYS=365 # 计算截止时间戳,早于该时间的镜像会被删除 CUTOFF_TIMESTAMP=$(date -d "-${RETENTION_DAYS} days" +%s) # 拉取所有镜像元数据逐行处理 ibmcloud cr images --json | jq -c '.[]' | while read -r image; do # 提取镜像的创建时间、仓库名、标签 created_at=$(echo "$image" | jq -r '.Created') repo=$(echo "$image" | jq -r '.Repository') tag=$(echo "$image" | jq -r '.Tag') image_full_name="${repo}:${tag}" # 把镜像创建时间转换为时间戳用于比对 created_timestamp=$(date -d "$created_at" +%s) # 时间比对,符合删除条件则执行删除 if [ "$created_timestamp" -lt "$CUTOFF_TIMESTAMP" ]; then echo "Deleting old image: ${image_full_name}, created at ${created_at}" ibmcloud cr image-rm -f "${image_full_name}" fi done echo "Old image cleanup completed"
3.3 使用说明
- 脚本依赖
jq工具处理JSON格式输出,若环境未安装可通过包管理器安装:Ubuntu/Debian执行apt install jq,CentOS/RHEL执行yum install jq,macOS执行brew install jq - 首次运行建议先注释掉
ibmcloud cr image-rm -f "${image_full_name}"这一行,先查看输出的待删除镜像列表是否符合预期,确认无误后再取消注释执行实际删除
4. 其他操作提示
- 若需要单独删除无标签的悬空镜像,可直接执行
ibmcloud cr image-prune-untagged - 生产环境操作前建议确认待删除镜像没有被正在运行的业务引用,避免引发镜像拉取失败问题
- 批量删除逻辑建议先在测试仓库验证无误后,再到生产环境执行
内容的提问来源于stack exchange,提问作者icordoba
相关产品推荐
相关产品推荐

