当前位置: 首页 > 知识库问答 >
问题:

Windows上使用docker部署openwrt开启的dns服务 ,无法正确域名解析?

晋越彬
2024-09-07

Windows上使用docker部署openwrt开启的dns服务 ,无法正确域名解析

在openwrt容器内使用nslook a.test 127.0.0.1 解析正确
在于openwrt容器处于相同docker网络的容器 使用nslookuo a.test $OPENWRT_CONTAINER_IP 解析正确
在Windows上使用nslookup a.test 127.0.0.1 解析失败

共有2个答案

夏嘉德
2024-09-07

我感觉你的问题可能出现在端口映射上,这里有个点需要注意下:并不是启动了docker容器后,本机就拥有了docker容器的服务能力。docker容器与本机是两个独立的主机。

  1. 位于同一网络下的docker能够解析,是由于可以访问到openwrt容器上的53端口,所以能够解析成功。
  2. 本机上执行nslookup a.test 127.0.0.1会请求到本机的53端口,由于本机并没有开启dns服务,所以解析不到。

解决方案:

为openwrt增加53端口映射,这样以来访问docker宿主(本机)的53端口时,就相当于访问了docker容器的53端口。

此时再执行nslookup a.test 127.0.0.1应该就行了。

潘志国
2024-09-07

在Windows上使用Docker部署OpenWRT并尝试使用其内置的DNS服务时遇到域名解析问题,通常与Docker容器的网络配置和Windows宿主机的网络隔离有关。以下是一些可能的原因和解决方案:

可能的原因

  1. 网络隔离:Docker容器默认运行在一个隔离的网络环境中,这意味着容器内的服务(如OpenWRT的DNS服务)默认不可从宿主机(Windows)直接访问。
  2. 端口映射:如果你的DNS服务在OpenWRT容器内监听的是默认端口(如53),并且你没有将这个端口映射到宿主机的某个端口上,那么Windows将无法通过127.0.0.1(即宿主机自身)来访问这个服务。
  3. IP地址问题:在Windows上尝试使用nslookup a.test 127.0.0.1时,你是在请求宿主机上的服务,而不是Docker容器内的服务。你需要使用Docker容器分配给OpenWRT的IP地址,或者通过端口映射在宿主机上访问。

解决方案

  1. 端口映射
    确保你已经将OpenWRT容器中的DNS服务端口(通常是53)映射到宿主机的某个端口。例如,你可以使用以下命令启动Docker容器,将53端口映射到宿主机的5353端口:

    docker run -d --name openwrt -p 5353:53/udp -p 5353:53/tcp <image_name>

然后,在Windows上使用nslookup a.test 127.0.0.1 -port=5353来尝试解析。

  1. 使用Docker网络的IP地址
    如果你不想或不能使用端口映射,你可以使用Docker网络分配给OpenWRT容器的IP地址。首先,找到OpenWRT容器的IP地址:

    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' openwrt

然后使用这个IP地址在Windows上进行nslookup

nslookup a.test <OPENWRT_CONTAINER_IP>
  1. 检查DNS配置
    确保OpenWRT容器中的DNS服务已正确配置,且能够处理你试图解析的域名。
  2. 网络模式
    如果你使用的是Docker的桥接网络(默认),并且需要跨宿主机访问容器内的服务,端口映射通常是必要的。如果你正在尝试使用更高级的网络配置(如Docker Compose中的自定义网络),请确保网络配置正确无误。

通过上述步骤,你应该能够解决在Windows上使用Docker部署的OpenWRT DNS服务的域名解析问题。

 类似资料:
  • 无域名部署ddns服务器,是服务器. 想在本地局域网部署ddns服务器,在局域网主机上安装客户端,让客户端把主机名 注册到ddns服务器上. 但是我查到的都是 部署ddns客户端 而没有 服务器

  • 稳定性: 2 - 稳定的 dns 模块包含两类函数: 1) 第一类函数,使用底层操作系统工具进行域名解析,且无需进行网络通信。 这类函数只有一个:dns.lookup()。例子,查找 iana.org: const dns = require('dns'); dns.lookup('iana.org', (err, address, family) => { console.log('IP

  • 问题内容: 我的机器位于具有专用DNS服务器和用于DNS解析的专用区域的专用网络上。我可以从主机上解析此区域中的主机,但不能从主机上运行的容器中解析主机。 主持人 : 集装箱 : 很明显,Google的公共DNS服务器不会解决我的私有DNS请求。我知道我可以使用或在中设置强制设置,但是我的笔记本电脑经常切换网络。似乎应该有系统的方法来解决此问题。 问题答案: Docker 通过复制主机的,并过滤掉

  • 我有许多Portlet在热部署后可以正常工作,但在重新启动Liferay(自动部署)后无法工作。我能让它们重新工作的唯一方法是重建并进行另一次热部署。 我有3个不同的spring mvc portlet(org.springframework.web.portlet.DispatcherPortlet)。其中最简单的3个在重启时没有问题,而其他2个则不工作。所有三个都是从使用Eclipse Lif

  • 启动wildfly服务器时使用:/独立的。sh或部署我的war时,我收到错误: 据我所知,没有部署任何东西。部署文件夹中没有?杀了java,又试了一次,甚至尝试了重启。 我错过了什么?

  • 在 Windows 上执行命令将返回以下结果: 运行诊断程序会产生以下结果: