Как настроить собственный DNS-сервер с помощью Docker?

8

Мне нужно добавить несколько строк, чтобы /etc/hostsмое веб-приложение работало внутри контейнера Docker.

Докер только для /etc/hostsчтения.

Я пытаюсь использовать dnsmasq:

ОТ убунту: 14.04
# ...
RUN apt-get install -y -q dnsmasq
RUN echo 'listen-address = 127.0.0.1' >> /etc/dnsmasq.conf
RUN echo 'resolv-file = / etc / resolv.dnsmasq.conf' >> /etc/dnsmasq.conf
RUN echo 'conf-dir = / etc / dnsmasq.d' >> /etc/dnsmasq.conf
RUN echo 'user = root' >> /etc/dnsmasq.conf
RUN echo 'nameserver 8.8.8.8' >> /etc/resolv.dnsmasq.conf
RUN echo 'nameserver 8.8.4.4' >> /etc/resolv.dnsmasq.conf
RUN echo 'address = "/ mydomain / 127.0.6.1"' >> /etc/dnsmasq.d/0hosts
RUN service dnsmasq start

Однако я не могу заставить Docker использовать мой DNS-сервер:

$ docker --dns = 127.0.0.1 запустить my / container cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

Что мне не хватает?

Конфигурация:

  • OS X 10.9.4
  • Докер версия 1.1.0, сборка 79812e3
  • Версия клиента boot2docker: v1.1.0, коммит Git: 7e20d36
Александр Гладыш
источник

Ответы:

9

--dnsработает, docker runно не для docker build. Поэтому лучшее решение - настроить параметры глобально с помощью

DOCKER_OPTS="--dns=my-private-dns-server-ip --dns=8.8.8.8"

На Ubuntu я поместил эту строку в /etc/default/docker

geekQ
источник
Обратите внимание, что /etc/default/dockerфайл не используется при запуске демона docker, вам следует изменить daemon.jsonфайл конфигурации. См. Docs.docker.com/engine/reference/commandline/dockerd/…
Давиде Икарди
6

Чего мне не хватает, так это того, что я испортил порядок опций и аргументов. Если я укажу --dnsпосле run, все работает нормально.

$ docker run --dns = 127.0.0.1 my / container cat /etc/resolv.conf
nameserver 127.0.0.1

Doh.

Александр Гладыш
источник
Это не работает, однако - dnsmasq не работает ...
Александр Гладыш
Вы также можете использовать --dnsопцию более одного раза. Напримерdocker run --dns 8.8.8.8 --dns 127.0.0.1 my/container
Бруно Биери