Docker не может разрешить хосты, которым требуется несколько серверов имен

528
SergeyOvchinnik

Я запускаю Docker-контейнер, который клонирует некоторые git-репозитории и создает проект внутри себя.

Он клонирует код из 2 разных репозиториев: один является общедоступным, github.comа другой - частным my.companys.github.enterprise.netи доступен только через VPN.

По моему у resolv.confменя есть 2 сервера имен: один для публичных сервисов и один для VPN:

nameserver 8.8.8.8 nameserver 10.10.3.3 

Когда я пытаюсь клонировать репозитории внутри моего док-контейнера, он может разрешать только github.comрепозитории и не может разрешать my.companys.github.enterprise.netрепозитории.

Если я переключаюсь по линиям в моем resolv.conf, то это могут решить только те, my.companys.github.enterprise.netа не github.comте.

Есть ли способ, позволяющий Docker разрешать обе ссылки на репозитории, используя 2 разных сервера имен resolv.confвместо того, чтобы просто пытаться использовать первый?

1
Возможно, вы можете установить в DNS вашей компании сервер пересылки (я имею в виду Интернет-сервер пересылки), и, установив его на первое место, вы сможете разрешить все. Если не возможно изменить DNS-сервер компании ... не знаю, как решить. OscarAkaElvis 7 лет назад 1
Если первый сервер имен отвечает ВСЕ (даже с «Я не знаю это имя / адрес»), то следующий не будет проверен. Предложение @OscarAkaElvis в его комментарии является точным. Ƭᴇcʜιᴇ007 7 лет назад 0

1 ответ на вопрос

1
milli

Ваша путаница заключается в том, что nameserverзаписи в, /etc/resolv.confкак предполагается, эквивалентны (т. Е. Являются зеркалами и будут давать одинаковые ответы независимо от того, какой из них запрашивается). Если один сервер имен отвечает «это не существует», код разрешения выполнен, он не пытается другие серверы имен искать другой ответ. Код распознавателя находится в libc и очень прост.

Самым простым решением для решения этой проблемы является запуск локального сервера имен в Docker ( BIND или несвязанные пакеты), который обладает умом знать о общедоступном пространстве имен и «альтернативном юниверсе», который является вашим частным пространством имен, обычно настраиваемым с помощью пересылки или зоны-заглушки. Google ваш друг, чтобы настроить это. Затем есть только одна nameserverзапись, /etc/resolv.confкоторая указывает на 127.0.0.1.