我们使用 AMI type 创建了一个 AWS EC2 实例Amazon Linux AMI 2018.03.0.20190514 x86_64 HVM
。
启动实例后,我们的软件打印出 IP 地址错误。当我们尝试运行该命令时hostname -i
,它返回了hostname: Unknown host
。
该hostname
命令本身返回正确的主机名,并且该ifconfig
命令显示eth0
具有正确的 IP 地址。
我们的/etc/hosts
文件包含:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
我们最终将其更改为包含:
<ip address> localhost <hostname>
::1 localhost6 localhost6.localdomain6
之后hostname -i
返回IP地址。但我们宁愿不必对 进行更改/etc/hosts
,因为我们查看了另一个团队的 EC2 实例运行完全相同的 AMI 类型,并且他们的/etc/hosts
文件包含:
127.0.0.1 localhost localhost.localdomain
在他们的实例上运行hostname -i
会返回正确的 IP 地址,而且看起来他们不必编辑/etc/hosts
文件。
为什么会hostname -i
返回Unknown host
我们的实例?
答案1
hostname -i
使用 DNS 解析来获取您的 IP。如果您收到该错误,则意味着您的计算机的主机名配置不正确。默认情况下,您的计算机从 VPC 的 DHCP 服务获取主机名及其私有 IP 地址。在 Amazon Linux 中,如果您想恢复为默认设置,请确保以下各项:
- 您的
/etc/sysconfig/network
外观必须如下所示(这可能是您的问题所在):
NETWORKING=yes
HOSTNAME=localhost.localdomain
NOZEROCONF=yes
- 你的
/etc/hosts
样子一定是这样的:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
确保重新启动服务器以应用这些更改。如果您使用自定义主机名,那么您必须为您的实例设置静态主机名,您可以按如下方式执行此操作(假设您的域是“example.com”并且该计算机的主机是“server”:
- 你的
/etc/sysconfig/network
样子一定是这样的:
NETWORKING=yes
HOSTNAME=server.example.com
NOZEROCONF=yes
- 你的
/etc/hosts
样子一定是这样的:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
<instance-private-ip> server server.example.com
确保重新启动您的服务器,当您运行该命令时hostname
,它应该打印出来server.example.com
,并且您应该在运行该命令时获得您的私有 IP hostname -i
。
有关 DHCP 及其在 VPC 中工作原理的更多信息,请参阅本文档。