故障排查 / 代码无法访问外网
脚本内无法访问外网,大多是因为 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 | |