V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
f1ynnv2
V2EX  ›  Python

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

  •  
  •   f1ynnv2 · 2023-06-07 17:20:26 +08:00 · 1512 次点击
    这是一个创建于 539 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    12 条回复    2023-06-17 11:29:32 +08:00
    wheat0r
        1
    wheat0r  
       2023-06-07 17:24:34 +08:00
    不熟悉,听说 alpine 有祖传 dns 问题
    whoosy
        2
    whoosy  
       2023-06-07 17:26:46 +08:00
    确定下相关代码在宿主机上跑有没有问题
    f1ynnv2
        3
    f1ynnv2  
    OP
       2023-06-07 17:27:57 +08:00
    @wheat0r 用的是 Debian 的镜像
    f1ynnv2
        4
    f1ynnv2  
    OP
       2023-06-07 17:29:34 +08:00
    @whoosy 直觉上感觉应该没问题,不过我来验证一下。我在镜像里和宿主机上一直跑个 ping 写日志,看看下次镜像里 app 出错时,两个 ping 日志是啥情况。
    Judoon
        5
    Judoon  
       2023-06-07 17:34:13 +08:00
    换本地 dns 缓存服务器试试,可能 udp 丢包问题
    jdOY
        6
    jdOY  
       2023-06-07 20:20:37 +08:00
    抓包看看一切都清楚
    yuikns
        7
    yuikns  
       2023-06-08 04:37:08 +08:00
    8.8.8.8 不太牢靠吧。如果国内比较在乎这个问题的话,试试企业的公共 dns 。比如腾讯的 119.29.29.29
    photon006
        8
    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
        9
    f1ynnv2  
    OP
       2023-06-08 09:47:11 +08:00
    @photon006 有道理,我先在镜像里直接编辑 hosts ,把常用的几个域名 ip 写死试试。
    stcQ2G13k9yxep40
        10
    stcQ2G13k9yxep40  
       2023-06-08 11:17:52 +08:00
    也许是域名本身的问题,反诈中心 96110 最近拦截了很多域名
    f1ynnv2
        11
    f1ynnv2  
    OP
       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
        12
    guanzhangzhang  
       2023-06-17 11:29:32 +08:00
    你 dns 上有换 doh 之类的非 udp53 试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 10:04 · PVG 18:04 · LAX 02:04 · JFK 05:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.