На моем Linux-компьютере, когда я бегу hostname
, он показывает mongodb
, но когда я бегу host mongodb
, он показывает:
mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)
Мой /etc/hosts
файл:
192.168.10.10 mongodb
192.168.10.10 localhost
127.0.0.1 localhost
#127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Мой первый вопрос: поскольку
/etc/hosts
сопоставление с IP на имя хоста, почему этот компьютер не может преобразовать имя хостаmongodb
в IP 192.168.10.10? Вместо этого, когда я бегуhost localhost
, это может быть решено и показывает:localhost has address 127.0.0.1
Мой другой вопрос: Согласно
/etc/hosts
файлу, имя хостаlocalhost
должно было быть разрешено до 192.168.10.10 вместо IP-адреса обратной связи 127.0.0.1. Кто-нибудь может объяснить это мне?
/etc/hosts
не имеет никакого влияния на разрешение DNS при запросе DNS - серверов напрямую, что это то , чтоhost
делает. Однако многие системные инструменты и утилиты используют этоlocalhost
определение, ожидая, что это будет адрес обратной связи, и используют разрешение имен системы (которое проверяет/etc/hosts
перед запросом DNS), чтобы разрешать имена, а не строго обращаться к DNS, которое может не всегда присутствовать./etc/hosts
файле относительноlocalhost
. В прошлом мы использовали какое-то программное обеспечение, которое вставляло бы127.0.0.2 localhost
в файл hosts, и это была последняяlocalhost
запись, из-за которой она фактически стала причиной всех видов проблем с программным обеспечением и лицензиями. Поэтому я рекомендую иметь127.0.0.1 localhost
в качестве первой записи в вашем/etc/hosts
файле и убедиться, чтоlocalhost
в этом файле нет других записей. И я также проверил бы любой материал ipv6./etc/resolv.conf
указываете на DNS-сервер, работающий непосредственно на вашем устройстве (например, на кешированиеdnsmasq
), и указанный сервер консультируется с вашим локальным сервером,/etc/hosts
прежде чем запрашивать внешние серверы. Тогда, косвенно, такие командыhost
будут выполняться вашей командой/etc/hosts
- это необычная установка, но я видел устройства, которые поставляются вместе, и опыт использования такой системы может показаться конфликтующим с этим ответом, если кто-то не знает об этой специфической настройке. ,В дополнение к ответу DopeGhoti, для проверки вашего разрешения, включая
/etc/hosts
приоритет, вы можете использоватьgetent hosts <some_hostname>
команду.источник
У меня возникли похожие проблемы с / etc / hosts, содержащим несколько пробелов между IP и именем хоста, вместо этого я использовал TAB. После изменения на TAB имя хоста может быть разрешено с помощью ping.
см. также на /superuser//a/938366/467479
источник
hosts
говорит:Fields of the entry are separated by any number of blanks and/or tab characters.
Возможно, в вашем случае был какой-то посторонний непечатный символ между IP и именем хоста?127.0.0.1
сопровождается 7 пробелами, за которыми следуетlocalhost
. Поэтому я бы не решился связать проблему конкретно с несколькими пробелами и завершить использование символа табуляции в качестве решения.localhost