Azure DevOps VMSS代理无法连接带专用终结点的私有ACR
解决Azure DevOps流水线推送私有ACR时的公网IP访问拒绝问题
检查Docker服务连接的认证逻辑
确认dockerConn服务连接使用服务主体密钥认证(而非ACR管理员账户,因为已禁用管理员凭据)。直接在VMSS代理节点上执行docker login <你的ACR名称>.azurecr.io,用该服务主体的客户端ID和密钥测试登录,验证是否能正常访问ACR。同时确认服务主体的acrPush角色是直接分配在ACR资源上,而非仅在服务连接配置中声明。排查VMSS代理子网的路由与服务端点
- 检查
agentSubnet子网的用户定义路由(UDR),确认没有强制将ACR流量导向公网出口的规则(比如指向NAT网关的0.0.0.0/0路由优先级过高)。 - 若子网启用了Azure Container Registry的服务端点,建议临时禁用。专用终结点与服务端点共存可能引发路由冲突,导致流量走公网而非专用链路。
- 检查
验证代理节点的DNS解析有效性
虽然nslookup结果正常,但在VMSS代理节点上执行ping <你的ACR名称>.azurecr.io或dig <你的ACR名称>.azurecr.io,确认返回的是ACR专用终结点的私有IP。如果返回公网IP,说明节点存在DNS缓存,重启代理节点或执行systemd-resolve --flush-caches(Linux节点)刷新缓存后重试。检查Docker@2任务的配置细节
- 确保任务的
containerRegistry参数明确指定dockerConn服务连接,没有硬编码ACR的公网地址。 - 查看代理节点的
/etc/docker/daemon.json(Linux)或Docker配置文件(Windows),确认未配置HTTP代理。如果存在代理配置,会导致Docker请求走公网出口,临时禁用后测试流水线。
- 确保任务的
兜底验证ACR的网络规则
确认ACR的网络访问规则仅启用专用终结点访问,没有误添加公网IP允许列表或其他非目标VNet的访问规则。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

