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

327 天前
 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 月份开始的,真的是诡异,不知道大家有没有什么思路去追查或者解决?谢谢

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

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

不理解这基本的 DNS 解析为啥还老出错,114.114.114.114, 223.5.5.5, 8.8.8.8 都轮番试过。
guanzhangzhang
317 天前
你 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