故障排查 / 程式碼無法訪問外網
指令碼內無法訪問外網,大多是因為 DNS、防火牆的原因。
具體表現為,指令碼執行類似 requests.get('http://bing.com')
的程式碼時,發生以下錯誤:
Temporary failure in name resolution
Connection refused
Connection to bing.com timed out
- 其他網路錯誤
可以依次執行以下操作排查問題:
- 在宿主機執行
ping 8.8.8.8
,檢查宿主機是否能夠訪問公網 - 在宿主機執行
curl http://bing.com
,檢查宿主機 DNS 是否正常 - 執行
docker exec -it {DataFlux Func 容器 ID} sh -c 'exec ping 8.8.8.8'
,檢查從容器內是否可以訪問公網 - 執行
docker exec -it {DataFlux Func 容器 ID} sh -c 'exec curl http://bing.com -i'
,檢查容器內 DNS 是否正常
8.8.8.8
是一個常用公共 DNS 伺服器的地址
如果所安裝的 DataFlux Func 映象內沒有 ping
命令,也可以改用 curl http://{IP 地址}
命令替代
可能原因及解決方案:
可能原因 | 解決方案 |
---|---|
宿主機無法訪問公網、DNS 不正常 | 檢查並調整作業系統網路配置 |
容器內無法訪問公網、DNS 不正常 | 檢查並調整 Docker 相關配置,必要時檢查作業系統網路配置 |
Docker DNS 配置參考
編輯/etc/docker/daemon.json
檔案,加入如下內容後,儲存並重啟 Docker 服務:
JSON | |
---|---|
1 2 3 4 5 6 |
|