You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ACR批量获取仓库及镜像脚本报错,单独执行命令正常

问题分析与解决方案

核心原因

你遇到的错误是因为ACR中部分仓库没有任何镜像标签,当执行az acr repository show-tags命令查询空仓库时,Azure CLI会返回ERROR: The requested data does not exist的错误。而你单独执行命令时,可能只测试了包含标签的仓库,所以没有触发这个问题。

脚本的潜在语法/写法问题

虽然核心原因是空仓库,但你的脚本存在几个可以优化的地方,避免类似问题并提升鲁棒性:

  • 变量扩展时未加双引号:若仓库名包含特殊字符(ACR中虽不常见,但语法上应防范),会导致命令执行异常。
  • 使用for循环遍历命令输出:若输出包含换行或意外空白,可能导致错误的遍历行为,推荐用while read更可靠。
  • 未处理命令执行失败的情况:空仓库的错误会直接输出到终端,影响脚本的整洁性。

修复后的脚本

#!/bin/bash

registry_name='REGISTRY_NAME'
destination='LOCATION_TO_STORE_LIST'

# 登录ACR并检查登录状态
if ! az acr login --name "$registry_name"; then
    echo "登录ACR失败: $registry_name" >&2
    exit 1
fi

# 清空目标文件(若存在)或创建新文件
> "$destination"

# 遍历所有仓库(使用while read确保每行一个仓库)
az acr repository list -n "$registry_name" --output tsv | while read -r repo; do
    # 查询仓库标签,将错误输出重定向到/dev/null以屏蔽空仓库的错误
    az acr repository show-tags -n "$registry_name" --repository "$repo" --output tsv --orderby time_desc 2>/dev/null | while read -r tag; do
        echo "$repo:$tag" >> "$destination"
    done
done

关键优化点

  1. 双引号包裹变量:所有变量扩展都用"$variable"形式,避免意外的单词拆分或字符解析问题。
  2. while read遍历输出:确保每行内容被正确识别为一个仓库/标签,不受空白字符影响。
  3. 错误屏蔽:将show-tags的错误输出重定向到/dev/null,避免空仓库的错误信息干扰结果。
  4. 登录状态检查:如果ACR登录失败,脚本直接退出并提示错误,避免后续无效执行。

内容的提问来源于stack exchange,提问作者JRDigital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:31:01