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

如何通过单个docker-compose文件在自定义流水线任务中连接两个ACR

方案可行性说明

单docker-compose文件拉取多个ACR镜像的思路本身完全可行,不需要拆分多份compose文件。Docker原生支持同一份配置里引用不同镜像仓库的镜像,只要本地Docker客户端对所有用到的 registry 都完成登录认证即可。


报错根因

你当前遇到的认证报错和多ACR逻辑本身无关,是DockerComposeConnection的调用方式存在问题:

  • 该类的open方法本质是执行对应ACR的docker login操作,你并行调用两次open的逻辑会导致上下文冲突,第二次调用会覆盖第一次的登录状态;如果第二个ACR的订阅、地址参数传错,会直接触发登录失败,不管后续是否用到该ACR的镜像都会报错。
  • 你创建第二个ACR的ACRAuthenticationTokenProvider实例时,可能没有将传入的azureSubscriptionEndpoint、azureContainerRegistry参数替换为第二个ACR对应的值,导致生成的令牌本身无效,调用open时直接报错。

正确实现步骤

  1. 先在流水线任务参数中新增第二个ACR对应的服务连接、仓库地址输入项
  2. 顺序完成两个ACR的登录认证,不要并行调用:
// 第一个ACR认证登录
const acr1Token = new ACRAuthenticationTokenProvider(
  tl.getInput("azureSubscriptionEndpoint1"), 
  tl.getInput("azureContainerRegistry1")
).getAuthenticationToken();
const composeConnection = new DockerComposeConnection();
composeConnection.open("", acr1Token);

// 第二个ACR认证登录,复用现有连接实例即可
const acr2Token = new ACRAuthenticationTokenProvider(
  tl.getInput("azureSubscriptionEndpoint2"), 
  tl.getInput("azureContainerRegistry2")
).getAuthenticationToken();
composeConnection.open("", acr2Token);
  1. 确认两个ACR都给流水线服务主体配置了AcrPull权限,流水线服务连接对两个ACR都有访问权限
  2. 两次登录完成后执行原有docker-compose up逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:48:03