故障排查 / 代碼無法訪問外網
腳本內無法訪問外網,大多是因為 DNS、防火牆的原因。
具體表現為,腳本執行類似 requests.get('http://bing.com') 的代碼時,發生以下錯誤:
Temporary failure in name resolutionConnection refusedConnection 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 | |