
Я использую Ubuntu 14.04 на облачном сервисе моей компании (мой экземпляр имеет эластичный IP). Я хочу проверить IP-адрес моего экземпляра, который я запускаю, с помощью командной строки, но это не сработало.
root@ubuntu14-graphite:~# hostname
ubuntu14-graphite
root@ubuntu14-graphite:~# hostname -i
hostname: Name or service not known
Я не понимаю, почему.
Я попытался выполнить ping до ubuntu14-graphite, но он сказал:
unknown host ubuntu14-graphite.
Означает ли это, что моего хоста вообще не существует?
У меня есть другой сервер (не облачный экземпляр, а физический сервер). На этом сервере я установил CentOS 6.7. Я проверил IP-адрес хоста, и он заработал, хотя в /etc/hosts
.
Вот вывод cat /etc/hosts
:
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
ff02::3 ip6-allhosts
решение1
Это означает, что «система» (я использую этот термин в широком, общем, неоднозначном смысле) не знает, что имя ubuntu14-graphite
соответствует вашему хосту и его IP-адресу. (Тот факт, что это имя вашего хостаимянедостаточно, чтобы это произошло.) Это почти наверняка означает, что у вас нет строки для ubuntu14-graphite
в вашем /etc/hosts
файле † , и что ее нет в вашей службе именования (например, DNS или NIS). Следовательно, способ исправить это — добавить ubuntu14-graphite
(и его IP-адрес) в ваш /etc/hosts
. Если вы используете более сложную (распределенную) систему именования, такую как DNS или NIS (или, может быть, ActiveDirectory?), окончательным решением будет добавить ваш хост в эту службу.
_____________
† ... и я вижу из вашего сообщения о вашем файле hosts, что это так.
Существуют некоторые дебаты по вопросу, какой IP-адрес следует связать с именем хоста. Все согласны, что это должен быть адрес, который «работает» для вашего хоста; т. е. команды типа должны быть успешными. Некоторые рекомендуют использовать адрес обратной связи. Адреса обратной связи всегда имеют вид 127ping A.B.C.D
.BCD; общие значения 127.0.0.1 и 127.0.1.1. Другие рекомендуют использовать адрес локальной сети, который может выглядеть как 192.168.CD(но это может быть почти что угодно) — но вам не следует помещать динамически назначенный адрес в ваш файл hosts (и, если вы используете DHCP с DNS, то динамически назначенный адрес(а) должен быть автоматически введен в ваши записи DNS). Используйте команды вроде ifconfig
и , hostname -I
чтобы увидеть, какие адреса используются.
решение2
Фактический способ проверить IP-адрес машины — использовать команду ifconfig
.
Обратите внимание, что в зависимости от фактической настройки облака экземпляр сервера может не знать публичный IP и знать только IP VLAN. Для получения подробной информации об этом вам необходимо обратиться к документации вашего провайдера.
решение3
Добавьте myhostname
запись в hosts
службу в /etc/nsswitch.conf
.
Другими словами, измените эту строку в /etc/nsswitch.conf
:
hosts: files dns
к этому:
hosts: files dns myhostname
Обычно имена хостов разрешаются с помощью /etc/hosts
файла и DNS, но имя хоста системы также можно разрешить, указав коммутатору службы имен сделать это (как это и будет сделано в этом изменении конфигурации).
Это объясняет, почему вы не увидели ничего особенного в /etc/hosts
файле в системе, по которому можно было бы определить локальное имя хоста.
Более подробная информация о myhostname
флаге находится здесь:здесь.
решение4
Перейдите в etc/hosts.save, проверьте там свое имя хоста. А затем отредактируйте, /etc/hosts
чтобы написать там свое имя хоста и имя хоста в hosts.save
. Также проверьте IP-адрес. Пример:
127.0.0.1 ubuntu
127.0.1.1 ubuntu.ubuntu-domain ubuntu