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

非公开访问ACR场景下如何配置ACI通过ARM模板拉取镜像

核心原因

当ACR公网访问设置为「仅选定网络」时,默认会拦截所有未显式放通的入站请求,你遇到的ACI镜像拉取失败,本质是ACR网络规则未放通对应访问源,和ARM模板部署逻辑、镜像构建流程本身无关。你之前开全量公网访问就能正常跑,也能印证这个判断。

具体配置步骤
  • 首先放通Azure受信任服务访问权限
    进入ACR的网络配置页,找到「允许受信任的Microsoft服务访问此容器注册表」选项,勾选后保存。
    踩坑提示:ACI本身属于Azure受信任服务,开启该选项后,同租户下的ACI只要持有合法的ACR拉取权限,平台会通过内部可信通道完成镜像拉取,不会走公网链路,你不需要费力去收集ACI的动态出口IP加白名单,这部分IP本身就是不固定的,手动加白名单迟早失效。

  • 其次放通DevOps微软托管代理的访问权限
    你之前执行az acr build能成功,是因为你指定了专用ACR任务代理池,这部分流量已经和ACR做了内部打通,但后续执行ARM模板部署的Azure PowerShell步骤是运行在微软托管的DevOps代理上的,这部分代理的出口IP按周动态更新,不要手动添加单个IP白名单:
    直接在ACR的公网允许规则中,添加和你DevOps组织同区域的AzureDevOps服务标记即可,服务标记会自动同步对应服务的全量IP段,不需要手动维护。

  • 调整ARM模板中的镜像拉取凭证配置
    不要在模板里硬编码ACR管理员账号密码,改用托管身份拉取镜像,避免公网凭证校验环节被网络规则拦截:

    1. 为ACI容器组开启系统分配托管标识,或提前创建好用户分配托管标识
    2. 在ACR的访问控制(IAM)页面,给对应托管标识分配AcrPull内置角色
    3. 在ARM模板的容器组配置中,通过托管身份配置镜像仓库凭证,参考配置片段如下:
    "imageRegistryCredentials": [
      {
        "server": "替换为你的ACR登录服务器地址,格式为<acr-name>.azurecr.io",
        "identity": "替换为你用于拉取镜像的托管标识资源ID"
      }
    ]
    

    如果你用系统分配托管标识,直接填容器组自身的资源ID即可。

  • 特殊场景校验(ACI部署在自定义VNet时)
    如果你给ACI配置了私有VNet部署,不需要单独给ACI子网配置ACR服务终结点,只要确认子网的出站安全规则没有拦截到AzureContainerRegistry服务标记的流量即可;如果你给ACR配置了专用终结点,要确保ACI所在VNet可以正常解析ACR的专用终结点域名。

验证注意事项
  • 所有ACR网络规则配置完成后,最长需要5分钟生效,不要刚保存配置就立刻跑部署测试
  • 如果配置后仍然报拉取错误,可以去ACR的日志面板查询ContainerRegistryRepositoryEvents类别的日志,直接查看被拦截请求的源地址和拦截原因,针对性补全规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:31:11