2017-10-28 167 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範圍的請求

名單上的第二個項目是什麼,我不考慮...