2017-10-28 218 views
0

我在Ubuntu服务器上运行一个dokku容器内的节点应用程序,它也为DNS运行bind9。在节点应用程序中,我正在运行快车。在节点的应用程序,我运行像这样在客户端的IP DNS反向查询(简体):来自dokku容器的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被设置为服务器的本地局域网IP,或者它的码头工人内部IP。这些地址中的任何一个都会导致延迟并最终超时尝试获取地址。

我应该怎么办?

+0

是bind配置为侦听其Ubuntu的服务器对泊坞窗桥IP?您是否尝试过使用'--dns' [docker run参数](https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/)(并提供Ubuntu服务器的Docker的IP桥)? – joelnb

+0

谢谢。您的评论帮助我找到了解决方案,我将在下面写出答案。 – felamaslen

回答

2

的解决方案是这样的:

  • 设置DNS_SERVERS=172.17.0.1

  • 允许通过防火墙的docker0接口上的请求

  • 确保bind上172.17.0.1 侦听该它被设置为允许来自172.17.0.0/16范围的请求

名单上的第二个项目是什么,我不考虑...