故障排查 / 代码无法访问外网
脚本内无法访问外网,大多是因为 DNS、防火墙的原因。
具体表现为,脚本执行类似requests.get('http://www.baidu.com')
的代码时,发生以下错误:
Temporary failure in name resolution
Connection refused
Connection to www.baidu.com timed out
- 其他网络错误
可以依次执行以下操作排查问题:
- 在宿主机执行
ping 114.114.114.114
,检查宿主机是否能够访问公网 - 在宿主机执行
curl http://www.baidu.com
,检查宿主机 DNS 是否正常 - 执行
docker exec -it {DataFlux Func 容器 ID} sh -c 'exec ping 114.114.114.114'
,检查从容器内是否可以访问公网 - 执行
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 |
|