Рейтинг:0

Использование dnsmasq в контейнере Docker для хоста и для внутреннего разрешения DNS Docker

флаг re

Я работаю над веб-проектом, состоящим из нескольких сервисов. У каждой службы есть собственный файл docker-compose.yml, в котором объявляется ее «приложение» и возможные зависимости (базы данных и т. д.). Чтобы все они хорошо работали вместе, я создал локальную среду разработки, которая связывает их вместе с прокси-сервером nginx, который имеет серверные блоки с правильными именами серверов, а затем proxy_pass передает запросы к фактическим контейнерам, используя сеть Docker.

Я также добавил dnsmasq в контейнер, чтобы помочь с DNS, чтобы использовать доменные имена локально вместо комбинации localhost:port (путем добавления распознавателя для тестового tld на 127.0.0.1).

Прокси docker-compose:

Сервисы:
    локальный прокси:
        сборка: ./nginx
        порты:
            - 80:80
            - 443:443

    локальный прокси-dnsmasq:
        build: ./dnsmasq # строит поверх 4km3/dnsmasq
        порты:
            - "53:53/TCP"
            - "53:53/удп"
        cap_add:
            - NET_ADMIN
сети:
    По умолчанию:
        внешний:
            имя: локальное доменное

dnsmasq.conf:

адрес прослушивания = 0.0.0.0
интерфейс=eth0
пользователь=корень

адрес=/.тест/0.0.0.0

пример прокси-сервера nginx:

сервер {
    имя_сервера логин.домен.тест;
    место расположения / {
        # заголовки...
        proxy_pass http://домен-логин:8080;
    }
}

пример docker-compose одного из сервисов:

Сервисы:
    домен-логин:
        строить: # ...
        сети:
            - По умолчанию
            - локальный домен

Все это отлично работает в браузере, я могу перейти к арендатор.домен.тест , получить перенаправление на логин.домен.тест...

Однако, когда контейнер с запущенным tenant.domain.test должен сделать запрос curl из своего контейнера к одному из других (например, login.domain.test для завершения потока oauth), он не работает, поскольку пытается разрешить логин.домен.тест переходя к самому себе:

root@6d25c2f5daf1:/var/www/app# nslookup login.domain.test
Сервер: 127.0.0.11
Адрес: 127.0.0.11#53

Неавторитетный ответ:
Имя: логин.домен.тест
Адрес: 0.0.0.0
;; время соединения истекло; нет доступа к серверам

Если я изменю dnsmasq.conf с адрес=/.тест/0.0.0.0 к адрес=/.тест/10.0.1.102 (текущий назначенный IP моего компьютера), все работает. Однако это, конечно, не рабочее решение, например, для коллег. Может ли кто-нибудь указать мне правильный путь Google или исправить?

Рейтинг:1
флаг jp

Линия адрес=/.тест/0.0.0.0 рассказывает dnsmasq для разрешения доменного имени тестовое задание на IP-адрес 0.0.0.0. Адрес 0.0.0.0 является недействительный IP-адрес. Он обрабатывается некоторыми браузерами (например, chrome) как 127.0.0.1 но это нестандартное поведение.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.