我在Ubuntu服务器上的dokku容器中运行节点应用程序,该服务器也为DNS运行bind9
。在节点应用程序中,我正在运行express。在节点应用上,我在客户端的IP上运行DNS反向查找,如下所示(简化):
const dns = require('dns');
const app = require('express')();
app.get('/myhostname', (req, res) => {
dns.reverse(req.headers['x-forwarded-for'], (err, hostnames) => {
res.json({ hostname: hostnames[0] });
});
});

这在本地工作正常,但是一旦部署到dokku容器,就会因ENOTFOUND
错误而失败。可能这是因为应用程序未设置为使用Ubuntu服务器作为其DNS服务器。所以我在require('dns')
之后尝试了这个:
dns.setServers([process.env.DNS_SERVERS])
其中DNS_SERVERS
设置为服务器的本地LAN ip或其docker内部IP。这些地址中的任何一个都会导致延迟并最终导致尝试获取地址的超时。
我应该怎么做?
答案 0 :(得分:2)
解决方案是:
设置DNS_SERVERS=172.17.0.1
通过docker0
界面
确保bind
正在侦听172.17.0.1 和,并将其设置为允许来自172.17.0.0/16
范围的请求
列表中的第二项是我没有考虑的......