最近在 docker 里经常遇到域名无法解析的问题

2023-06-07 17:20:26 +08:00
 f1ynnv2

用 Python 写了个简单的 app ,和几个网站交互,都出现过域名无法解析的异常。

下面是通过 imap 连接腾讯邮箱(imap.exmail.qq.com)时的报错,其实连接其它网站的时候都出现过这类提示,高峰的时候大概 20 分钟异常一次,低的时候一天有 3 ,4 次。

2023-06-07 16:45:17,483 [ERROR][lib_email.py->fetch_email][115] Traceback (most recent call last):
  File "/opt/app/lib_email.py", line 32, in fetch_email
    imapClient = IMAPClient(self.imap_server, ssl= True)
  File "/usr/local/lib/python3.9/site-packages/imapclient/imapclient.py", line 285, in __init__
    self._imap = self._create_IMAP4()
  File "/usr/local/lib/python3.9/site-packages/imapclient/imapclient.py", line 322, in _create_IMAP4
    return tls.IMAP4_TLS(
  File "/usr/local/lib/python3.9/site-packages/imapclient/tls.py", line 44, in __init__
    imaplib.IMAP4.__init__(self, host, port)
  File "/usr/local/lib/python3.9/imaplib.py", line 202, in __init__
    self.open(host, port, timeout)
  File "/usr/local/lib/python3.9/site-packages/imapclient/tls.py", line 49, in open
    sock = socket.create_connection(
  File "/usr/local/lib/python3.9/socket.py", line 823, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/local/lib/python3.9/socket.py", line 954, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

我在 Docker 镜像里直接修改过 /etc/resolv.conf 使用 8.8.8.8 ,223.5.5.5 也修改过宿主机的 daemon.json 使用上述 DNS, 但是都没啥效果。

好像是从 4 月份开始的,真的是诡异,不知道大家有没有什么思路去追查或者解决?谢谢

1550 次点击
所在节点    Python
12 条回复
wheat0r
2023-06-07 17:24:34 +08:00
不熟悉,听说 alpine 有祖传 dns 问题
whoosy
2023-06-07 17:26:46 +08:00
确定下相关代码在宿主机上跑有没有问题
f1ynnv2
2023-06-07 17:27:57 +08:00
@wheat0r 用的是 Debian 的镜像
f1ynnv2
2023-06-07 17:29:34 +08:00
@whoosy 直觉上感觉应该没问题,不过我来验证一下。我在镜像里和宿主机上一直跑个 ping 写日志,看看下次镜像里 app 出错时,两个 ping 日志是啥情况。
Judoon
2023-06-07 17:34:13 +08:00
换本地 dns 缓存服务器试试,可能 udp 丢包问题
jdOY
2023-06-07 20:20:37 +08:00
抓包看看一切都清楚
yuikns
2023-06-08 04:37:08 +08:00
8.8.8.8 不太牢靠吧。如果国内比较在乎这个问题的话,试试企业的公共 dns 。比如腾讯的 119.29.29.29
photon006
2023-06-08 09:13:06 +08:00
我遇到过,干脆内网环境用 adguardhome 自建 dns 服务,启动 docker 容器指向它,现在稳了

docker run -d --name myName --restart=always --init -e TZ=Asia/Shanghai --dns="10.13.1.50" --network=host image
f1ynnv2
2023-06-08 09:47:11 +08:00
@photon006 有道理,我先在镜像里直接编辑 hosts ,把常用的几个域名 ip 写死试试。
stcQ2G13k9yxep40
2023-06-08 11:17:52 +08:00
也许是域名本身的问题,反诈中心 96110 最近拦截了很多域名
f1ynnv2
2023-06-08 13:09:18 +08:00
试了下,在 docker compose 文件里通过 extra_hosts:把用到的几个域名写死,暂时没再遇到这问题了。

不理解这基本的 DNS 解析为啥还老出错,114.114.114.114, 223.5.5.5, 8.8.8.8 都轮番试过。
guanzhangzhang
2023-06-17 11:29:32 +08:00
你 dns 上有换 doh 之类的非 udp53 试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/946693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX