luolongfei/freenom

cURL error 6: Could not resolve host

sean908 opened this issue · 30 comments

描述问题

2022/04/18后tg再未收到freenom容器推送的消息
昨天查询,发现后台一直在输出'cURL error 6: Could not resolve host'的错误日志

重现步骤

截图&日志
image

你做了哪些尝试

已尝试重启容器、重启docker、更新容器版本
从软路由ping对应url,其中my.freenom.com无法响应

环境信息

  • 系统: OpenWrt
  • PHP 版本: 未知
  • 脚本版本: v0.4.4 以及 最新
  • 是否 Docker:

额外的备注

curl error 6 一般是跟你环境的 dns 有关。你 ping 不通不能得出任何结论,因为服务器那边可以禁止 ping。你尝试从软路由访问其它网站地址能不能连通?通过 curl 命令访问。

curl error 6 一般是跟你环境的 dns 有关。你 ping 不通不能得出任何结论,因为服务器那边可以禁止 ping。你尝试从软路由访问其它网站地址能不能连通?通过 curl 命令访问。

curl www.baidu.com
curl www.google.com
均OK

curl my.freenom.com
返回这个

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>

PS: 夭寿,有个freemon的域名正好到期,被回收了😢

以前正常执行的?再次重启 docker 试试?

这个跟代码没关系。是你环境的问题,你本地环境如果不稳,建议在免费的环境多部署一份。

以前正常执行的?再次重启 docker 试试?

对,以前都是正常的,每天收到一次推送。
失效那天的前一天,我给tg_bot另外加了一个推送任务。

这个跟你加任务没关系。你能不能在命令行,以交互模式进到容器里?我怀疑是不是容器里的 dns 配置有问题

这个跟你加任务没关系。你能不能在命令行,以交互模式进到容器里?我怀疑是不是容器里的 dns 配置有问题

需要到容器执行啥命令,或者查看什么文件?
docker exec 能满足需求不?

执行
docker exec -it freenom /bin/bash

进入后,看看有没有 cat 命令

进入后,看看有没有 cat 命令

可以。要查什么不?

cat /etc/resolv.conf
看看这个文件的内容

cat /etc/resolv.conf 看看这个文件的内容

search lan

nameserver 8.8.8.8
nameserver 8.8.4.4

你的路由器环境里有没有代理?

OpenWrt 我记得是路由器的系统

你的路由器环境里有没有代理?

有代理,passwall

是全局的吗?容器的流量会不会全局走代理?

是全局的吗?容器的流量会不会全局走代理?

非全局,规则匹配的

那么我怀疑是因为,你的路由器在国内,而容器里使用的是谷歌 dns,谷歌的 dns 可能经常受到干扰。你换个 dns 提供商试试?可以先换成和你 OpenWrt 系统里一样的 dns,你看看你的 OpenWrt 系统里的 dns 是用的哪家?

那么我怀疑是因为,你的路由器在国内,而容器里使用的是谷歌 dns,谷歌的 dns 可能经常受到干扰。你换个 dns 提供商试试?可以先换成和你 OpenWrt 系统里一样的 dns,你看看你的 OpenWrt 系统里的 dns 是用的哪家?

有可能是!
我刚把容器的dns改成了路由器本身的,curl baidu/google 都有了输出
现在重启容器试下

那么我怀疑是因为,你的路由器在国内,而容器里使用的是谷歌 dns,谷歌的 dns 可能经常受到干扰。你换个 dns 提供商试试?可以先换成和你 OpenWrt 系统里一样的 dns,你看看你的 OpenWrt 系统里的 dns 是用的哪家?

呃不行,重启容器后resolv.conf会恢复成默认的谷歌dns...

你临时修改后,先不要重启,先验证一下。修改后,去到 /app 目录,执行 php run 然后看看输出

你临时修改后,先不要重启,先验证一下。修改后,去到 /app 目录,执行 php run 然后看看输出

可以了。
所以我该如何修改容器的resolv.conf呢?

那目前可以确定是 dns 服务器的问题。

你看看,容器环境里,有没有 /etc/udhcpc/udhcpc.conf 文件?

那目前可以确定是 dns 服务器的问题。

你看看,容器环境里,有没有 /etc/udhcpc/udhcpc.conf 文件?

/etc/udhcpd.conf 有这个

在 /etc/udhcpc/udhcpc.conf 文件里添加一行
RESOLV_CONF=no
保存
然后再去修改 /etc/resolv.conf
保存
重启容器看看 /etc/resolv.conf 是否被恢复默认

如果没有 /etc/udhcpc/udhcpc.conf 文件,就新建立一个

另外,你目前能正常使用的 dns 是怎样的?我考虑下个版本将它添加到容器里的备用 dns 项

另外,你目前能正常使用的 dns 是怎样的?我考虑下个版本将它添加到容器里的备用 dns 项

解决了,在docker run命令中使用了--dns参数。

DNS的话,我机器自身有DNS服务,所以我直接使用了

我第一次部署的时候一切正常,但是没几天就开始一直在报“登录freenom出错操作超时”,cURL error 28
image
求解,谢谢

网络超时是你服务器的线路问题,跟代码无关。