跳转至

故障排查 / 代码无法访问外网

脚本内无法访问外网,大多是因为 DNS、防火墙的原因。

具体表现为,脚本执行类似requests.get('http://www.baidu.com')的代码时,发生以下错误:

  1. Temporary failure in name resolution
  2. Connection refused
  3. Connection to www.baidu.com timed out
  4. 其他网络错误

可以依次执行以下操作排查问题:

  1. 在宿主机执行ping 114.114.114.114,检查宿主机是否能够访问公网
  2. 在宿主机执行curl http://www.baidu.com,检查宿主机 DNS 是否正常
  3. 执行docker exec -it {DataFlux Func 容器 ID} sh -c 'exec ping 114.114.114.114',检查从容器内是否可以访问公网
  4. 执行docker exec -it {DataFlux Func 容器 ID} sh -c 'exec curl http://www.baidu.com -i',检查容器内 DNS 是否正常

114.114.114.114 是一个常用公共 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" : [
        "114.114.114.114",
        "8.8.8.8"
    ]
}