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

如何将ACR仓库所有镜像导入不同租户的另一ACR实例

ACR跨租户批量迁移解决方案

前置依赖

  • 已在源ACR所属租户创建具备AcrPull权限的服务主体,保存好应用ID与密码
  • 已在目标ACR所属租户创建具备AcrImport权限的身份(服务主体/当前登录账号)
  • 本地环境已安装Azure CLI,且可正常访问两个ACR的网络

批量导入方案(Shell脚本实现)

该方案通过循环拉取源ACR的仓库、标签列表,批量调用az acr import命令完成全量迁移,支持保留原仓库名、标签名,不需要本地拉取镜像再推送,迁移效率更高。
脚本示例如下:

# 1. 替换为实际环境配置
SOURCE_REGISTRY_DOMAIN="sourceregistry.azurecr.io" # 源ACR访问域名
TARGET_REGISTRY_NAME="myregistry" # 目标ACR名称(不需要加.azurecr.io后缀)
SOURCE_SP_APP_ID="<你的源租户服务主体应用ID>"
SOURCE_SP_PASSWORD="<你的源租户服务主体密码>"

# 2. 配置要迁移的仓库列表,如需迁移源ACR所有仓库,可直接注释下行,启用下下行自动拉取
MIGRATE_REPOS=("repo1" "repo2" "repo3" "repo4")
# MIGRATE_REPOS=($(az acr repository list --name ${SOURCE_REGISTRY_DOMAIN%%.*} --username $SOURCE_SP_APP_ID --password $SOURCE_SP_PASSWORD -o tsv))

# 3. 循环迁移每个仓库的所有标签
for REPO in "${MIGRATE_REPOS[@]}"
do
  # 拉取当前仓库所有标签
  TAG_LIST=$(az acr repository show-tags --name ${SOURCE_REGISTRY_DOMAIN%%.*} --repository $REPO --username $SOURCE_SP_APP_ID --password $SOURCE_SP_PASSWORD -o tsv)
  for TAG in $TAG_LIST
  do
    echo "开始迁移镜像:${REPO}:${TAG}"
    az acr import \
      --name $TARGET_REGISTRY_NAME \
      --source ${SOURCE_REGISTRY_DOMAIN}/${REPO}:${TAG} \
      --image ${REPO}:${TAG} \
      --username $SOURCE_SP_APP_ID \
      --password $SOURCE_SP_PASSWORD
    # 可自行添加异常重试、迁移成功校验逻辑
  done
done

常见问题优化

  • 如果镜像数量超过1000个,可在脚本中加入并发控制,避免调用API被限流
  • 注:如果源ACR配置了IP访问限制,需要将运行脚本的客户端公网IP添加到源ACR的允许访问列表中
  • 如需修改目标端的仓库名、标签前缀,只需修改--image参数的取值即可,比如要加前缀migrated/,可改为--image migrated/${REPO}:${TAG}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 09:24:10