1

Я использую контейнер 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 ответ1

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .