Docker замінює мій /etc/resolv.conf файл всередині контейнерів


17

Я хочу встановити resin/rpi-raspbian:jessieконтейнер /etc/resolv.confна:

nameserver 208.67.222.222
nameserver 208.67.220.220

Мій Dockerfile має такий рядок:

ADD resolv.conf /etc/resolv.conf

Цей доданий файл містить правильні сервери імен.

Хост мого докера /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

Лише після того, як я поміняю резолюцію.conf вручну з контейнера (або за допомогою docker exec), це виглядає правильно.

Я вважаю за краще уникати цього виправляти за допомогою команди exec. Хтось має уявлення, що тут відбувається?


На їхній вікі є кілька випадків, які можуть пояснити вашу ситуацію.
Джулі Пелтьє,

Погляньте на моє запитання та відповідь.
Зейнаб Аббасімазар

Відповіді:


14

AFAIK, докер переосмислює деякі файли в зображенні під час його запуску , навіть якщо вони були додані в Dockerfile. Це, безумовно, включає /etc/hosts, і, ймовірно, те ж саме відбувається і для /etc/resolv.conf. Це, мабуть, використовується для належної побудови "внутрішньої" мережі Docker за замовчуванням (щоб зображення бачили одне одного, але не хостили тощо). Якщо ви дійсно впевнені, що хочете замінити / змінити деякі з цих файлів, я вважаю, що ви повинні зробіть це як частина виконання часу, тобто як частина CMDрядка. Наприклад:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...

3
Це вірно. /etc/resolv.confкопіюється з хоста при запуску контейнера.
wisbucky

4

Як я бачу, ви використовуєте user-defined networksі версію Docker Engine> = 1.10. Отже, з офіційної документації на двигун докер про Embedded DNS server in user-defined networks:

Ці --dns IP-адреси керуються вбудованим DNS-сервером і не оновлюються у файлі /etc/resolv.conf.

Ваш dns повинен працювати, але ви не побачите жодного файлу конфігурації.

Список літератури .


0

Я вирішив проблему, якщо це веб-додаток для контейнерів у Azure.

Є два контейнера, товариш . Куду та господар

Кроки

1.Установіть ssh з вашого файлу docker (також включіть sshd config)

2.створіть контейнерstart.sh (який оновлює резолюцію.conf)

3.Встановіть точку входу всередину

Тепер хост resol.conf оновлюється, і ви можете використовувати будь-який dns, який хочете

PS: Якщо ви не можете підібрати користувальницьку DNS у мережі, не хвилюйтесь. Ми також не могли. Можливо, потрібно перезавантажити, якщо ви використовуєте середовище ASE

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.