#networking #docker #docker-compose #openvpn #dnsmasq
#сеть #docker #docker-compose #openvpn #dnsmasq
Вопрос:
Я работаю над конфигурацией docker-compose, которая должна запустить контейнер openvpn, подключенный к контейнеру dnsmasq. Сервер openvpn должен автоматически обнаружить контейнер dnsmasq и использовать его в качестве dns-сервера. Обнаружение выполняется путем поиска записи «dnsmasq» в файле /etc/hosts.
У меня есть следующий файл docker-compose.yml:
version: '2'
services:
data:
build: ./
dnsmasq:
cap_add:
- NET_ADMIN
hostname: dnsmasq
image: <dnsmasq image>
ports:
- 53:53/udp
restart: always
openvpn:
cap_add:
- NET_ADMIN
depends_on:
- data
- dnsmasq
image: <openvpn image>
ports:
- 1194:1194/udp
restart: always
volumes_from:
- data
Я указал «dnsmasq» в качестве имени хоста для контейнера dnsmasq и ожидаю, что оно появится в «/ etc / hosts» в контейнере openvpn. Похоже, этого не происходит.
Это дамп из /etc/ hosts из контейнера openvpn:
openvpn_1 | 127.0.0.1 localhost
openvpn_1 | ::1 localhost ip6-localhost ip6-loopback
openvpn_1 | fe00::0 ip6-localnet
openvpn_1 | ff00::0 ip6-mcastprefix
openvpn_1 | ff02::1 ip6-allnodes
openvpn_1 | ff02::2 ip6-allrouters
openvpn_1 | 172.19.0.4 d44a72f42ef9
Я ожидаю, что d44a72f42ef9 будет «dnsmasq».
Что я делаю не так?
Я запускаю docker-compose 1.8.1.
Комментарии:
1. вы можете использовать
extra_hosts
директиву в вашем файле docker compose2. @bjhaid Таким образом, IP может быть жестко запрограммирован в файле docker-compose
Ответ №1:
Более старые версии компоновки в docker работали путем добавления в /etc/ hosts. Вероятно, ваша система изначально была настроена в соответствии с этой парадигмой, где способ получения разрешения контейнера был встроен в /etc / hosts.
Однако более новые версии docker этого не требуют. Они автоматически разрешают разрешение имени службы, если контейнер находится в той же сети. Таким образом, вы можете получить к нему доступ через:
http://dnsmasq:port
Комментарии:
1. Есть ли способ вывести список имен служб, доступных из запущенного контейнера?
Ответ №2:
Сначала вам нужно добавить ключ «ссылки» в свой docker-compose.yml
вот так:
services:
dnsmasq:
...
openvpn:
...
links:
- dnsmasq
Разрешение DNS для этого имени хоста обрабатывается не через /etc/hosts
, а скорее через встроенный в Docker DNS. Вы можете запросить его с помощью обычных инструментов DNS, таких как:
$ getent hosts dnsmasq
$ nslookup dnsmasq
$ dig dnsmasq A
$ # etc...
Ответ №3:
По-видимому, файлы hosts не обновляются. Хост «dnsmasq» просто доступен с использованием какого-то другого механизма. Это можно проверить с помощью:
ping -c1 dnsmasq