У меня на хосте работает dnsmasq
, и я хочу, чтобы его использовали док- контейнеры вместо серверов Google по умолчанию (8.8.8.8
)
Мой хост /etc/resolv.conf
выглядит следующим образом:
» cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search mydomain.net
И контейнер /etc/resolv.conf
выглядит следующим образом:
root@ubuntu:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
search mydomain.net
nameserver 8.8.8.8
nameserver 8.8.4.4
Кажется, что docker повторно использует хост /etc/resolv.conf
но отбрасывает запись 127.0.0.1
и вместо этого добавляет серверы имен Google.
Я попытался добавить запись DNS, ссылающуюся на интерфейс docker0
:
» ifconfig docker0
docker0 Link encap:Ethernet HWaddr 02:42:8e:65:b0:88
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:8eff:fe65:b088/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:55824 errors:0 dropped:0 overruns:0 frame:0
TX packets:74365 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:15702804 (15.7 MB) TX bytes:60639605 (60.6 MB)
Следующее:
docker run \
-it \
--name ubuntu.bionic \
--restart always \
--dns 172.17.0.1 \
ubuntu:bionic
Но днс не работает
root@ubuntu:/# apt-get update
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'security.ubuntu.com'
Как я могу создать док-контейнер для использования DNS-сервера в хост-системе?
РЕДАКТИРОВАТЬ
Похоже, мне нужно указать dnsmasq
для привязки к интерфейсу docker0
:
listen-address=127.0.0.1,172.17.0.1
Мне все еще не нравится, что мне нужно дважды указывать IP-адрес интерфейса docker0
, один раз для команды docker run
для каждого контейнера, который я хочу создать, а также для конфигурации dnsmasq
.
EDIT2
Я могу сказать , docker
использовать по умолчанию мой локальный сервер DNS (который runninng в контейнере, и достижимы в других контейнерах в интерфейсе docker0
172.17.0.1
» sudo cat /etc/docker/daemon.json
{
"dns": ["172.17.0.1", "8.8.8.8"]
}
И затем перезапустите демон докера:
sudo service docker restart
Я все еще несколько обеспокоен тем, что docker
может решить изменить IP-адрес интерфейса docker0
, и я буду вынужден перенастроить docker
и dnsmasq
и перестроить контейнеры.