故障排查 · 实用指南
curl 错误 7“连接失败”?改防火墙前先证明目标、路径与监听器
错误 7 只说明连接步骤失败,不等于防火墙必然阻断。先固定实际连接跳点、运行环境与套接字结果。

curl 错误 7 表示 libcurl 无法连接主机或代理;它不能单独证明防火墙阻断,也不能说明 curl 连接的是目标、代理、哪种地址族或正确监听端口。
固定原始请求和详细连接行,在失败环境中复现,区分拒绝、超时与无路由,再只修改已证实的责任边界。
固定实际连接跳点
重试前复制完整参数、URL、工作目录、运行身份、错误和 curl -v 连接行,记录协议、主机、端口、解析地址及是否选择代理。
第一次对照不要缩写或重输命令;URL、代理变量或默认端口变化都会变成另一条连接。
在失败运行环境内复现
从原容器、服务账号、任务执行器或应用主机运行同一受限测试。宿主交互 Shell 成功只能作为对照,不能证明服务命名空间和路由正常。
记录代理环境、curl 配置、地址族与网络命名空间。Docker 案例显示不同运行条件会让同一主机名指向不同回环或桥接地址。
区分拒绝、超时与无路由
保留具体连接结果:ECONNREFUSED 表示所选端点拒绝,ETIMEDOUT 表示未及时建立连接,ENETUNREACH 表示运行环境没有到该网络的路由。
在同一环境测试目标和一个已知正常端点。不要用单一端口推断全局防火墙,也不要把超时当作没有监听器的证明。
核对目标与监听器
在你控制的基础设施上核实服务状态、端口以及绑定的接口与地址族,并把公布端点与实际监听器对照。
若主机名返回多个地址,保留 curl 尝试顺序。IPv4 成功不会抹去 IPv6 监听失败,它只定位了地址族分支。
单独处理代理首跳
若 curl 选择代理,第一条 TCP 连接是代理主机和端口。先在同一环境验证该跳点,代理连接成功后再讨论目标可达性。
不要为诊断删除全局代理。记录适用的代理/no_proxy变量、配置文件与源 IP 策略,只做一项可逆变更。
用原请求完成退出测试
以相同 URL、代理选择和运行环境重复原命令,记录实际对端、协议响应、连接耗时与最终退出码。
责任仍不清楚、变更会扩大暴露面或端点属于其他团队时应停止,并交接地址、端口、环境、结果和时间。
