Я хочу установить для моего resin/rpi-raspbian:jessie
контейнера /etc/resolv.conf
:
nameserver 208.67.222.222
nameserver 208.67.220.220
Мой Dockerfile имеет следующую строку:
ADD resolv.conf /etc/resolv.conf
Этот добавленный файл содержит правильные серверы имен.
Мой хост Docker /etc/resolv.conf
содержит правильную информацию.
Я запускаю контейнер так:
docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash
Несмотря на все это, контейнер дает такой вывод:
root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0
Только после того, как я вручную изменил resolv.conf из контейнера (или с помощью docker exec), он выглядит правильно.
Я бы предпочел избежать исправления с помощью команды exec. У кого-нибудь есть идея, что здесь происходит?
Ответы:
AFAIK, docker перезаписывает некоторые файлы в изображении при запуске , даже если они были добавлены в Dockerfile. Это наверняка включает в себя
/etc/hosts
, и, скорее всего, то же самое происходит и для/etc/resolv.conf
. Это, по-видимому, используется для правильной сборки по умолчанию «внутренней» сети Docker (чтобы изображения видели друг друга, но не хост, и т. Д.) Если вы действительно уверены, что хотите переопределить / изменить некоторые из этих файлов, я считаю, что вы должны сделать это как часть действий во время выполнения, то есть как частьCMD
строки. Например:источник
/etc/resolv.conf
копируется с хоста при запуске контейнера.Как я вижу, вы используете
user-defined networks
и версию Docker Engine> = 1.10. Итак, из официальной документации по движку докера оEmbedded DNS server in user-defined networks
:Ваш днс должен работать, но вы не увидите ни в одном файле конфигурации.
Ссылки .
источник
Я решил проблему, если это веб-приложение для контейнеров в Azure.
Есть 2 контейнера помощник . Куду и хозяин
меры
1. Установите ssh из файла Docker (также включите конфигурацию sshd)
2. создайте containerstart.sh (который обновляет resolv.conf)
3. Установите точку входа внутри
Теперь хост resolv.conf обновляется, и вы можете использовать любой DNS, который вы хотите
PS: Если вы не можете подобрать собственный DNS в сети, не беспокойтесь. Мы тоже не могли. Может потребоваться перезагрузка, если вы используете среду ASE
источник