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

如何通过ADO Pipeline将镜像推送到其他Azure账户的ACR?

跨Azure账户推送镜像到ACR的解决方法

方法1:用Azure CLI手动完成登录与推送

绕开Docker@2任务对服务连接类型的限制,直接用Azure CLI登录目标账户后执行Docker命令:

  1. 添加Azure CLI任务,登录目标Azure账户并完成ACR登录:
- task: AzureCLI@2
  displayName: 登录目标Azure账户及ACR
  inputs:
    azureSubscription: 'MyAZConnection' # 你现有的azurerm类型服务连接
    scriptType: bash
    inlineScript: |
      # 用目标账户的服务主体登录(提前把SP的ID、密码、租户ID存为ADO秘密变量)
      az login --service-principal -u $(target-sp-client-id) -p $(target-sp-secret) --tenant $(target-tenant-id)
      # 登录到目标ACR
      az acr login --name <目标ACR名称>
  1. 接着用Bash任务执行镜像打标签和推送:
- task: Bash@3
  displayName: 推送镜像到目标ACR
  inputs:
    inlineScript: |
      docker tag <本地镜像名>:<版本标签> <目标ACR登录服务器>/<镜像名>:<版本标签>
      docker push <目标ACR登录服务器>/<镜像名>:<版本标签>

注意:目标账户的服务主体必须拥有ACR的AcrPush权限,所有敏感信息要存在ADO的秘密变量里,别明文写在管道里。

方法2:手动创建跨账户的Docker Registry服务连接

不需要依赖同一微软账户订阅,直接手动配置Docker Registry类型的服务连接:

  1. 进入ADO项目的设置 > 服务连接,点击新建服务连接,选择Docker Registry。
  2. 选择Docker Hub或其他注册表,填写目标ACR的登录服务器(格式如xxx.azurecr.io)、用户名(可以用ACR管理员账户名,或者目标账户的服务主体ID)、密码(管理员密码或服务主体密码)。
  3. 测试连接通过后保存,之后在Docker@2任务里用这个新服务连接:
- task: Docker@2
  displayName: Push image to ACR
  inputs:
    command: push
    containerRegistry: '<新建的Docker Registry服务连接名>'
    repository: '<镜像名>'
    tags: '<版本标签>'

方法3:给源账户服务主体授权目标ACR推送权限

如果目标账户管理员允许,直接把你现有MyAZConnection对应的服务主体加到目标ACR的权限列表里:

  1. 在目标Azure账户的ACR资源中,进入访问控制(IAM),添加角色分配,选择AcrPush角色,指定源账户的服务主体为受让人。
  2. 之后管道里直接用现有服务连接登录,再操作ACR:
- task: AzureCLI@2
  displayName: 登录源账户并访问目标ACR
  inputs:
    azureSubscription: 'MyAZConnection'
    scriptType: bash
    inlineScript: |
      az acr login --name <目标ACR名称>
- task: Bash@3
  displayName: 推送镜像到目标ACR
  inputs:
    inlineScript: |
      docker tag <本地镜像名>:<版本标签> <目标ACR登录服务器>/<镜像名>:<版本标签>
      docker push <目标ACR登录服务器>/<镜像名>:<版本标签>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:43:37