从dokku容器中查找DNS
我正在Ubuntu服务器上运行dokku容器内的一个节点应用程序,该服务器也运行bind9
的DNS。 在节点的应用程序,我运行快车。 在节点的应用程序,我正在运行一个DNS反向查找客户端的IP这样(简化):
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或其泊坞窗内部IP。 这两个地址中的任何一个都会导致延迟,并最终超时尝试获取地址。
我应该怎么做呢?
解决scheme是这样的:
-
设置
DNS_SERVERS=172.17.0.1
-
允许通过
docker0
接口上的防火墙docker0
请求 -
确保
bind
正在监听172.17.0.1, 并将其设置为允许来自172.17.0.0/16
范围的请求
列表中的第二项是我没有考虑的