私有网络环境下Self-Hosted Agent与Azure DevOps的连接问题求助
Azure DevOps自托管代理容器连接失败排查方案
场景回顾
vnet-a内的容器实例作为Azure DevOps自托管代理,所有出站流量经vnet-b的防火墙路由。启动后日志显示[1;36m1. Determining matching Azure Pipelines agent...[0m,代理无法连接DevOps服务器。已完成配置:
- 容器开放出站TCP 443、80端口
- 防火墙添加出站规则,允许容器IP向Azure DevOps官方指定的4个IP段发起443端口流量
排查步骤
1. 补全Azure DevOps IP范围规则
Azure DevOps的IP范围随区域动态更新,并非仅固定4个地址。需确认防火墙规则覆盖了代理所在区域的全部DevOps IP段,可通过官方发布的实时IP列表文件获取完整范围,避免遗漏。
2. 验证DNS解析能力
在容器内执行以下命令,确认能正确解析DevOps服务域名:
nslookup dev.azure.com # 或 dig dev.azure.com
若解析失败,需检查vnet的DNS配置是否正确,同时确保防火墙允许DNS出站流量(UDP/TCP 53端口)。
3. 测试端口连通性
在容器内测试与DevOps IP的443端口连通性:
telnet <DevOps_IP> 443 # 或 nc -zv <DevOps_IP> 443
若连接超时,需排查:
- 防火墙规则的源IP是否为容器的私网IP(而非公网IP)
- 防火墙路由表是否正确将vnet-a流量导向互联网
- 容器所属的网络安全组(NSG)是否限制了出站流量
4. 核对代理启动参数
确认容器启动时传入的参数正确,包括DevOps组织URL、PAT令牌等。错误参数会导致代理无法发起有效连接,可重新启动容器并明确指定参数:
docker run -e AZP_URL=https://dev.azure.com/你的组织名 -e AZP_TOKEN=你的PAT令牌 -e AZP_AGENT_NAME=代理名称 microsoft/azure-pipelines-agent:latest
5. 抓包分析网络流量
若以上步骤无效,在容器内抓包分析443端口流量:
tcpdump -i any port 443 -w devops-traffic.pcap
通过分析抓包文件,可直观查看连接请求的状态(如SYN包是否收到ACK响应),定位流量是否被拦截。
内容的提问来源于stack exchange,提问作者bakkie103
相关产品推荐
相关产品推荐

