从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范围的请求

列表中的第二项是我没有考虑的