Назад | Перейти на главную страницу

Docker не может разрешать DNS-имена вне сети Docker. Получение сообщения «ошибка чтения с DNS-сервера»

Я развернул док-контейнер Adguard Home, который хочу использовать в качестве DNS-сервера / прокси. Разрешение DNS работает нормально, когда я выполняю nslookup с компьютера (а также хоста докеров) в своей локальной сети. (успешное разрешение локальных и внешних имен DNS)

Однако при выполнении nslookup из контейнера возвращается следующее сообщение:

;; connection timed out; no servers could be reached

Если я взгляну на журнал демона докеров (в режиме отладки), я вижу это сообщение

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"

В журнале adguard home заметных проблем нет. На все запросы (а также те, которые соответствуют временным меткам запроса из контейнеров) отвечают, и возвращается правильный адрес.

Чтобы сделать nslookup, я использовал контейнер busybox (я могу пропинговать контейнер adguard):

docker run --network=adguardhome_default busybox nslookup -debug -type=A host.local

Я запускаю докер на распиане 10. Версия докера - 19.03.12. Версия Docker-compose - 1.21.0.

Я попробовал несколько вещей, в том числе:

Кажется, что встроенный докер DNS не понимает ответ службы adguard или ведет себя не так, как я ожидал. Я благодарен за любую помощь и надеюсь, что предоставил достаточно подробностей.

Я пытался использовать параметр --dns-opt=use-vc чтобы заставить DNS по TCP, как предлагается Вот. Используемая опция отражена в resolv.conf контейнера, но, похоже, не имеет никакого эффекта / не соблюдается. Запрос по-прежнему выполняется с использованием UDP.

resolv.conf хоста:

# Generated by resolvconf
domain fritz.box
nameserver 192.168.178.39

resolv.conf контейнера:

nameserver 127.0.0.11
options ndots:0

docker-compose файл для adguard:

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:

DNS-серверы adguard:

192.168.178.1
tcp://192.168.178.1