При попытке отладить сетевую проблему, локальную для нашей интрасети, стало очевидно, что curl
host
nslookup
и dig
вести себя иначе. куда dig
и host
возвращает IP-адрес рассматриваемого URL, curl
и nslookup
возвращение:
curl: (6) Could not resolve host: internal.site.company.com
и
nslookup: can't resolve 'internal.site.company.com`
Хотя это не должно иметь значения, по сути, чтобы дать больше контекста проблемы, эта проблема возникает на и за docker-machine
(проверено с использованием докер-машины на обоих virtualbox
и parallels
если быть точным). В docker-machine
и все контейнеры, на которых он расположен, имеют правильный IP-адрес желаемого внутреннего DNS-сервера в своих /etc/resolv.conf
. IP-адрес желаемого URL-адреса также доступен с компьютеров, которые не могут разрешить имя. Как упоминалось выше, адрес является внутренним сайтом, и наш DNS-сервер также является внутренним. Сайт доступен и разрешается с компьютера, на котором docker-machine
установлен.
Это подводит меня к вопросам ...
1) Под капотом какие dig
и host
делать иначе, чем оба cURL
и nslookup
?
2) Что может мешать браузеру или curl
от разрешения URL как host
и dig
успешно разрешаете имя?
dig -v
: DiG 9.11.1
host -v
: host 9.11.1
curl -V
: curl 7.49.1
версия докера: Version 17.06.0-ce-mac19 (18663) Channel: stable
Boot2Docker version 17.06.0-ce, build HEAD : 0672754
Я ожидал curl
нам библиотеку преобразователя, которая будет использовать поставщиков услуг имен, перечисленных в /etc/nsswitch.conf
Спецификация хостов по порядку. Если это не включает DNS, разрешение DNS не произойдет. nslookup
не документировано использование этого файла, но, судя по вашему опыту, может. Часто эти данные кэшируются демоном кэширования службы имен. Если демон не работает, вы можете столкнуться с такой проблемой, даже если другие конфигурации верны.
host
и dig
являются чистыми программами поиска DNS. Оба они разрешают имена только через DNS. Они не будут разрешать имена с помощью файлов или других поставщиков, не относящихся к DNS. Я ожидаю, что они воспользуются информацией в /etc/resolv.conf
прямо.