问题
腾讯云上买了个新服务器准备部署新应用,系统使用CentOS7.9,应用启动时会获取hostname(本地主机名),然后ping hostname,从而获取到本机IP地址,在应用启动过程中发现日志报错:“Name or service not known”,在Shell下ping本地主机名也一样的错误
解决方法
解决方法其实也很简单,在/etc/hosts里面增加一下host的映射即可(假设hostname为test-88,ip地址为172.18.8.4):
echo "test-88 172.18.8.4" >> /etc/hosts
疑问
想起来以前购买的服务器也是CentOS7.9,部署的也是类似应用,同样的也会在启动时获取hostname和ip,但是之前都没有手动添加hosts的动作,为什么没有报错呢?
解惑
先介绍下 名称服务切换配置文件:/etc/nsswitch.conf,简单来说这个文件决定了机器上所有名称的解析顺序(当然也包括host)
在问题机上执行:
# grep ^host /etc/nsswitch.conf
hosts: files dns
在正常的机器上执行:
# grep ^host /etc/nsswitch.conf
hosts: files dns myhostname
发现两者配置的区别没有!最后少了myhostname参数,这个就是导致问题的罪魁祸首,加上这个参数,去掉/etc/hosts上手动添加的配置,一切正常
关于nsswitch.conf的介绍,更多可以参考这篇文章:nsswitch.conf文件详解
总结
看了下阿里云同样版本的服务器(CentOS7.9,内核小版本也一致),发现myhostname这个参数也是有的,估计是腾讯云自己做了调整,他们为什么要做这个调整呢?这个以后有机会再问下腾讯云的技术吧