跳轉到

故障排查 / 程式碼無法訪問外網

指令碼內無法訪問外網,大多是因為 DNS、防火牆的原因。

具體表現為,指令碼執行類似 requests.get('http://bing.com') 的程式碼時,發生以下錯誤:

  1. Temporary failure in name resolution
  2. Connection refused
  3. Connection to bing.com timed out
  4. 其他網路錯誤

可以依次執行以下操作排查問題:

  1. 在宿主機執行 ping 8.8.8.8,檢查宿主機是否能夠訪問公網
  2. 在宿主機執行 curl http://bing.com,檢查宿主機 DNS 是否正常
  3. 執行 docker exec -it {DataFlux Func 容器 ID} sh -c 'exec ping 8.8.8.8',檢查從容器內是否可以訪問公網
  4. 執行 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
{
    "dns" : [
        "8.8.8.8",
        "8.8.4.4"
    ]
}