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

Azure Batch拉取ACR私有镜像触发NodePreparationError错误求助

问题根因

你遇到的400 Bad Request错误是Batch计算节点尝试通过Azure实例元数据服务获取指定用户分配托管标识(UAMI)的访问令牌时请求无效,核心原因是没有将UAMI关联到Batch池的计算节点上,仅在容器注册表配置中声明UAMI引用、给Batch账户分配UAMI均无法让节点获得该标识的使用权。

修复步骤

  • 第一步:补充池的UAMI关联配置

    你当前的代码仅在容器注册表参数中填写了identity_reference,缺少将UAMI挂载到计算节点的配置,需要按如下修改:
    1. 新增模型导入:
      from azure.batch.models import PoolIdentity, UserAssignedIdentity
      
    2. 在PoolAddParameter中新增identity参数:
      new_pool = PoolAddParameter(
          id=pool_id,
          # 新增以下identity配置
          identity=PoolIdentity(
              type="UserAssigned",
              user_assigned_identities={
                  "/subscriptions/7bd2fd6e-1cb6-4db2-82fe-67c7ea3024cd/resourceGroups/SANDBOX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my_uami": UserAssignedIdentity()
              }
          ),
          virtual_machine_configuration=VirtualMachineConfiguration(
              # 原有其他配置保持不变
          ),
          # 原有其他参数保持不变
      )
      
  • 第二步:核对基础配置正确性

    1. 确认代码中填写的UAMI资源ID完全匹配实际创建的UAMI的资源ID,无拼写、大小写、订阅/资源组名称错误。
    2. 如果你的Batch池使用自定义虚拟网络,检查子网关联的网络安全组(NSG)是否放行了到169.254.169.254端口80的出站流量,该地址是Azure实例元数据服务的本地地址,封禁会直接导致令牌获取失败。
    3. 确认UAMI的AcrPull角色权限分配在目标私有ACR的资源级别,没有被权限边界、Azure Policy拦截生效。

修改完成后重新创建池即可解决节点预配失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:03