我已经在Ubuntu 16.04 Droplet上观察到此问题,但是我想它在其他基于Debian的Dropping上也会发生。下面有更多说明。
创建一个全新的实例后,我发现hostname --fqdn
并没有返回我所期望的FQDN(全限定域名),而是仅返回了主机名,没有附加域名。
$ hostname
mydroplet
$ hostname --fqdn
mydroplet
我希望看到这样的东西:
$ hostname --fqdn
mydroplet.example.com
这是一个潜在的严重问题,因为许多服务都依赖于FQDN才能正常工作。
如何解决此问题?
答案 0 :(得分:-1)
以下这些命令可解决现有液滴上的问题:
echo "domain example.com" | sudo tee /etc/resolvconf/resolvconf.d/head
sudo service resolvconf restart
命令hostname --fqdn
应该返回FQDN(全限定域名),如下所示:
$ hostname --fqdn
mydroplet.example.com
如果您看不到FQDN,而只看到主机名...那么...您遇到的问题迟早会损害您的应用程序,shell脚本或服务。
$ hostname --fqdn
mydroplet
休斯顿,我们有问题!
简而言之,我们需要使/etc/resolv.conf
看起来像这样:
$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4
如果您看不到domain example.com
,则迟早会遇到问题。
您可以认为这仅仅是编辑文件的问题,对吗?没那么快! ...我们无法手动更改此文件,因为它是由Debian自己维护的。如果您手动更改它,它将在一段时间后自行返回到其初始状态。
在cloud-init用户数据保留的文本区域中添加以下代码段:
#cloud-config
manage_etc_hosts: false
write_files:
- path: /etc/resolvconf/resolv.conf.d/head
content: |
domain example.com
runcmd:
- service resolvconf restart
上面的代码段保证hostname --fqdn
会在您首次登录Droplet时立即返回您期望的结果。