故障排查 · 實用指南
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、代理選择和运行環境重複原命令,記錄實际對端、协议响應、連線耗時與最终退出码。
责任仍不清楚、變更会擴大暴露面或端点屬于其他团隊時應停止,并交接位址、端口、環境、结果和時間。
