我已经在Ubuntu 16.04 Droplet上观察到了此问题,但我想它会在其他基于Debian的Droplet上发生。下面有更多说明。

创建全新实例后,我发现hostname --fqdn不会像我期望的那样返回FQDN(全限定域名),而仅返回主机名,没有附加域名。

$ hostname
mydroplet
$ hostname --fqdn
mydroplet


我希望看到这样的东西:

$ hostname --fqdn
mydroplet.example.com


这是一个潜在的严重问题,因为许多服务都依赖于FQDN才能正常工作。

如何解决此问题?

最佳答案

对于急躁的人

以下这些命令可解决现有Droplet上的问题:

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自己维护的。如果您手动更改它,它将在一段时间后自行返回到其初始状态。

通过Digital Ocean的Web界面创建水滴

在为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时立即返回您期望的结果。

关于linux - 为什么在Digital Ocean上主机名FQDN设置不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51751430/

10-09 06:20