首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker无法解析码头网络外的DNS名称。接收“从DNS服务器读取失败”

Docker无法解析码头网络外的DNS名称。接收“从DNS服务器读取失败”
EN

Server Fault用户
提问于 2020-08-13 22:18:26
回答 1查看 10.2K关注 0票数 2

我已经部署了一个Adguard Home docker容器,我想使用它作为我的DNS服务器/代理。当我在本地网络上从机器(以及对接主机)进行nslookup时,DNS解析工作得很好。(成功解析本地和外部dns名称)

但是,当在容器中进行nslookup时,将返回以下消息:

代码语言:javascript
运行
复制
;; connection timed out; no servers could be reached

如果我查看docker守护进程日志(处于调试模式),就会看到以下消息

代码语言:javascript
运行
复制
Aug 13 22:56:27 host dockerd[641]: time="2020-08-13T22:56:27.646666208+02:00" level=debug msg="Name To resolve: host.local."
Aug 13 22:56:27 host dockerd[641]: time="2020-08-13T22:56:27.647142480+02:00" level=debug msg="[resolver] query host.local. (A) from 172.22.0.4:32939, forwarding to udp:192.168.178.39"
Aug 13 22:56:27 host dockerd[641]: time="2020-08-13T22:56:27.756187183+02:00" level=debug msg="[resolver] read from DNS server failed, read udp 172.24.0.2:56565->192.168.178.39:53: i/o timeout"

在阿德卫斯特家的日志中没有明显的问题。所有请求(也是与容器中的请求时间戳相匹配的请求)都会得到答复,并返回正确的地址。

为了进行nslookup,我使用了一个busybox容器(我可以打开adguard容器):

代码语言:javascript
运行
复制
docker run --network=adguardhome_default busybox nslookup -debug -type=A host.local

我在里海10号运行码头。码头版本是19.03.12。Docker-compose版本为1.21.0。

到目前为止,我尝试了一些事情,包括:

  • 在/etc/docker/daemon.json中设置DNS
  • 使用--DNS选项设置DNS
  • 在复合文件中设置DNS
  • 编辑容器resolv.conf
  • 重新设置码头桥

似乎嵌入的坞DNS不理解adguard服务的响应,或者没有按照我的预期行事。我感谢你的帮助,希望我能提供足够的细节。

我试图使用参数--dns-opt=use-vc强制dns在tcp上进行,就像建议的这里一样。所使用的选项反映在容器的resolv.conf中,但似乎没有任何效果/没有得到遵守。请求仍然使用UDP。

宿主的resolv.conf:

代码语言:javascript
运行
复制
# Generated by resolvconf
domain fritz.box
nameserver 192.168.178.39

集装箱resolv.conf:

代码语言:javascript
运行
复制
nameserver 127.0.0.11
options ndots:0

docker-为adguard编写文件:

代码语言:javascript
运行
复制
version: '3.2'
services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    ports:
      - 53:53/tcp
      - 53:53/udp
        #- 67:67/udp
        #- 68:68/tcp
        #- 68:68/udp
      - 853:853/tcp
      - 3000:3000/tcp
    volumes:
      - type: volume
        source: data
        target: /opt/adguardhome/work
      - type: volume
        source: config
        target: /opt/adguardhome/conf

volumes:
  data:
  config:

adguard服务器:

代码语言:javascript
运行
复制
192.168.178.1
tcp://192.168.178.1
EN

回答 1

Server Fault用户

发布于 2020-09-11 10:39:58

我也有同样的问题。一个对接的护卫,它完美地工作在所有的东西上,除了在同一个树莓上托管的其他对接者。

从另一个码头,我可以击打护卫,我可以进入53端口。从调试中的adguard中,我看到请求进来了,我没有看到错误,但是没有返回到码头的响应。

奇怪的是,在Adguard的日志中,我看到它正确地处理了我的DNS请求,但是客户端IP adress不是来自原始的码头,而是adguard本身的IP。

最后,如果它尝试使用google进行nslookup,那么它的工作原理是完美的。

据我所知,看起来adguard服务器是在它自己的IP上响应DNS请求,而不是在原始源ip上。

编辑:我已经能够解决我的问题,使用macvlan网络在我的所有码头。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1030064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档