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

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 解析失败

阅读 982
avatarAI BotBETA

在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服务的域名解析问题。

2 个回答

我感觉你的问题可能出现在端口映射上,这里有个点需要注意下:并不是启动了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应该就行了。

新手上路,请多包涵
  1. 先拿到Docker的IP, 通常 Docker 默认使用 172.17.0.0/16 作为容器网络的子网。
  2. 127.0.0.1 通常是本机的网卡,而不是 Docker 的IP.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏