gpt4 book ai didi

node.js - 来自 dokku 容器的 DNS 查找

转载 作者:行者123 更新时间:2023-12-02 21:19:56 24 4
gpt4 key购买 nike

我在 Ubuntu 服务器上的 dokku 容器中运行 Node 应用程序,它也运行 bind9对于 DNS。在 Node 应用程序中,我正在运行 express。在 Node 应用程序上,我正在对客户端的 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。这些地址中的任何一个都会导致尝试获取地址的延迟和最终超时。

我该怎么办?

最佳答案

解决方案是这样的:

  • 设置 DNS_SERVERS=172.17.0.1
  • 允许请求通过 docker0 上的防火墙接口(interface)
  • 确保 bind正在监听 172.17.0.1 并且它被设置为允许来自 172.17.0.0/16 的请求范围

  • list 上的第二项是我没有考虑的...

    关于node.js - 来自 dokku 容器的 DNS 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994145/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com