Я работаю над веб-проектом, состоящим из нескольких сервисов. У каждой службы есть собственный файл 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 или исправить?