Я работаю за прокси компании.
Из-за множества наложенных ограничений мне приходится переключаться на общедоступную сеть, когда я собираюсь создавать образы докеров (в основном образы на основе Ubuntu). Сборка выполняется на том же компьютере (таким образом, тот же dns conf).
Помимо сборки, я всегда запускаю свои контейнеры за этим прокси.
Компания также (и действительно) имеет свой собственный днс.
К сожалению, я не понимаю, как правильно передать хост хосту dns в контейнеры, и не понимаю, как docker удается построить контейнеры resolv.conf.
Когда я смотрю на хост, я вижу такой конф:
$ cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.8.4
nameserver 10.xxx.yyy.z
search rennes.mycompany.fr
И внутри своих контейнеров я вижу:
search rennes.mycompany.fr
nameserver 127.0.0.11
options ndots:0
Что странно для меня, так это то, что в контейнере можно найти только часть конфигурации хоста ...
И когда я пытаюсь получить любое имя, размещенное компанией, из контейнера, у меня возникает ошибка разрешения имени.
Но если я добавлю сервер имен resolv.conf хоста к серверу контейнера, он будет работать:
$ echo nameserver 192.168.1.1 >> /etc/resolv.conf
Итак, это действительно не способ сделать это ... но я не уверен, как мне это сделать.
Я пытался добавить 'dns' к моим службам в docker-compose, но у меня не получилось (или я не так понимаю), и документация там довольно спартанская ...
Есть ли способ указать докеру использовать / поделиться конфигурацией DNS хоста?
Может ли моя проблема возникнуть из-за создания образа вне сети компании?
РЕДАКТИРОВАТЬ: docker-compose.yml
version: '3.3'
services:
my-apache:
image: apache:latest
ports:
- 8088:80
networks:
- my-project-net
dns:
- 192.168.1.1
depends_on:
- my-project
my-project:
image: my-project:latest
networks:
- my-project-net
dns:
- 192.168.1.1
networks:
my-project-net:
driver: bridge
только «my-project» требуется доступ к днс компании, но я добавил днс к обоим на случай, если пропустил какую-то подсказку ...
РЕДАКТИРОВАТЬ 2: немного больше деталей и попыток
- версия докера: 18.03.0-ce, сборка 0520e24
- версия docker-compose: 1.18.0, сборка 8dd22a9
Имя, которое я пытаюсь найти, выглядит следующим образом:
some-pf-db.network.mycompany.fr
(модифицированный) демон настройки Docker выглядит так:
$ cat /etc/docker/daemon.json:
{
"insecure-registries": [
"some.test.registry.mycompany.fr:5000"
],
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
},
"dns-opts": ["ndots:15"]
}
Следуя @BMitch link , я попытался обновить демон docker (+ restart) с опциями ndots до 15 (не думайте, что мне нужно так много, но это ленивый способ!) ...
и, к сожалению, это не решило проблему. Новое значение заменяет прежнее в контейнере, но оно продолжает сбой, достигая днс
не удалось перевести имя хоста "some-pf-db.network.mycompany.fr" в
адрес: временная ошибка в разрешении имени
EDIT3: Я искал не тот контейнер ... итак, изменив пороговое значение для точек (ndots) до (например) 15 в пределах демона docker conf (/ etc / docker / daemon) .json) И удаление параметра "днс" из сервиса заставляет магию действовать! Теперь у меня есть доступ к моей компании DNS для имен (с большим количеством точек в них!)