Azure Container Instances YAML部署私有IP容器组报错咨询
报错根因
这个报错是两个问题叠加导致的:
- 你使用的
2019-12-01版本的Container Instance API,私有IP部署场景强制要求绑定提前创建的网络配置文件(Network Profile),不支持直接关联子网 - 你当前YAML里直接在properties根节点写
subnetIds的写法,在旧版API中不属于有效网络配置字段,API完全没有识别到你配置了虚拟网络关联,因此判定你在无网络配置的情况下设置了私有IP,直接抛出错误。
网络配置文件是Azure早期为ACI对接VNet设计的中间资源,本质是预存了子网关联、网络规则的模板,旧版API要求私有IP场景必须显式引用这个资源,不能直接绑定子网。
解决方案
优先选第一种方案,流程更简单,不需要手动创建额外资源。
方案1:升级API版本(推荐)
2021-07-01及之后的稳定版ACI API已经取消了网络配置文件的强制要求,支持直接关联子网完成私有IP部署,你只需要做两处修改:
- 把YAML顶部的
apiVersion字段值从2019-12-01改成2021-07-01(或更新的稳定版本,比如2023-05-01) - 确认你要部署的目标子网已经提前配置了服务委派,委派对象选择
Microsoft.ContainerInstance/containerGroups,这个配置在子网的管理页面就能直接设置。
修改后的YAML核心结构参考(其余配置和你原来的保持一致即可):
apiVersion: 2021-07-01 location: westeurope name: imgeneus-login properties: imageRegistryCredentials: # 原有镜像仓库配置保持不变 restartPolicy: OnFailure containers: # 原有容器配置保持不变 osType: Linux ipAddress: type: Private ports: - protocol: tcp port: 80 - protocol: tcp port: 30800 subnetIds: - id: /subscriptions/503236c4-a00c-466c-b7b0-4800e8dec527/resourceGroups/imgeneus-test/providers/Microsoft.Network/virtualNetworks/imgeneus-test/subnets/imgeneus-test name: imgeneus-test type: Microsoft.ContainerInstance/containerGroups
方案2:兼容旧版API(需创建Network Profile)
如果你因为特殊原因必须使用2019-12-01版本API,需要先创建网络配置文件再修改YAML:
- 先创建对应子网的网络配置文件,可参考如下命令创建,创建完成后记录返回结果里的网络配置文件资源ID:
az network profile create \ --name aci-test-profile \ --resource-group imgeneus-test \ --vnet-name imgeneus-test \ --subnet imgeneus-test \ --container-ip-address-type Private
- 修改YAML配置,删除properties根节点下原有的
subnetIds块,新增networkProfile字段,填入你拿到的网络配置文件ID,结构如下:
properties: # 其余原有配置(镜像仓库、容器配置、ipAddress、osType等)全部保留 networkProfile: id: <你创建的网络配置文件的完整资源ID>
注意事项
- 私有IP类型的容器组不会默认分配公网访问地址,如果你需要对外暴露服务,需要在同虚拟网络内部署应用网关、内部负载均衡器做流量转发
- 用于部署ACI的子网不能同时部署其他和ACI网络规则冲突的资源,建议使用独立的子网部署容器组
- 如果升级API版本后部署报子网权限相关错误,优先检查子网的服务委派配置是否正确
内容的提问来源于stack exchange,提问作者Anna Melashkina
相关产品推荐
相关产品推荐

