Linux 为什么在Digital Ocean上主机名FQDN设置不正确?

Linux 为什么在Digital Ocean上主机名FQDN设置不正确?,linux,dns,digital-ocean,hostname,fqdn,Linux,Dns,Digital Ocean,Hostname,Fqdn,我在Ubuntu16.04微滴上观察到了这个问题,但我想它发生在其他基于Debian的微滴上。更多解释如下 在创建了一个全新的实例之后,我注意到,hostname--fqdn并没有像我预期的那样返回fqdn(完全限定域名),而是只返回主机名,而没有附加域名 $ hostname mydroplet $ hostname --fqdn mydroplet 我希望看到这样的情况: $ hostname --fqdn mydroplet.example.com $ hostname --fqdn

我在Ubuntu16.04微滴上观察到了这个问题,但我想它发生在其他基于Debian的微滴上。更多解释如下

在创建了一个全新的实例之后,我注意到,
hostname--fqdn
并没有像我预期的那样返回fqdn(完全限定域名),而是只返回主机名,而没有附加域名

$ hostname
mydroplet
$ hostname --fqdn
mydroplet
我希望看到这样的情况:

$ hostname --fqdn
mydroplet.example.com
$ hostname --fqdn
mydroplet.example.com
$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4
这是一个潜在的严重问题,因为许多服务依赖FQDN才能正常工作

如何解决这个问题?

对于不耐烦的人 以下这些命令修复了现有液滴上的问题:

echo "domain example.com" | sudo tee /etc/resolvconf/resolvconf.d/head
sudo service resolvconf restart
有什么问题? 命令
hostname--fqdn
应返回fqdn(完全限定域名),如下所示:

$ hostname --fqdn
mydroplet.example.com
$ hostname --fqdn
mydroplet.example.com
$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4
如果您看不到FQDN,而只看到主机名。。。好您遇到的问题迟早会损害您的应用程序、shell脚本或服务

$ hostname --fqdn
mydroplet
休斯顿,我们有麻烦了

固定路线 简而言之,我们需要使
/etc/resolv.conf
如下所示:

$ hostname --fqdn
mydroplet.example.com
$ hostname --fqdn
mydroplet.example.com
$ 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-config
manage_etc_hosts: false
write_files:
  - path: /etc/resolvconf/resolv.conf.d/head
    content: |
      domain example.com
runcmd:
  - service resolvconf restart

上面的代码片段保证
主机名--fqdn
将在您第一次登录droplet时立即返回您期望的内容。

不要盲目使用
8.8.8.8
8.8.4.4
,这与设置本地主机名完全无关。@Patrick Mevzek::我自己不使用Google DNS。这只是一个例子。Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问地点。
mydroplet.example.com
不是FQDN。FQDN以点(
)结尾,表示DNS树的顶部
mydroplet.example.com.
localhost.
是FQDN。当点存在时,解析程序不应向搜索路径添加后缀。你使用谁的域名是另一回事。另请参见W.Richard Stevens.“@jww
hostname--fqdn
不会在末尾附加点,不管RFC怎么说。因为点是隐式的。与@jww所说的相反,它的存在并不一定意味着一个名称是否是FQDN。请参阅RFC 8499:“但是,由于每个名称最终都共享一个公共根,因此名称通常是相对于根(例如“www.example.net”)编写的,并且仍然称为“完全限定”。@Patrick Mevzek:没关系。我刚刚展示了命令的输出,以便读者能够理解问题是什么,命令的输出应该是什么(不管是否有前导点),以及为了解决这个问题应该做些什么。非常感谢您的解释。:-)