【docker】Linux下查看或配置Docker的DNS服务器

命令配置

要查看或配置Docker的DNS服务器,你可以使用以下方法:

  1. 查看Docker的DNS配置:

    • 在 Linux 上,可以通过运行以下命令来查看Docker的DNS配置:
      docker info | grep -i dns
      
    • 在 Windows 和 macOS 上,可以在 Docker Desktop 的设置中找到 DNS 配置。
  2. 配置Docker的DNS服务器:

    • 在 Linux 上,可以通过编辑 Docker 的配置文件 daemon.json 来配置 DNS 服务器。该文件通常位于 /etc/docker/ 目录下。可以使用以下命令打开配置文件:
      sudo nano /etc/docker/daemon.json
      
      在配置文件中添加或修改 dns 字段,指定所需的 DNS 服务器地址,例如:
      {
              
              
        "dns": ["8.8.8.8", "8.8.4.4"]
      }
      
      保存配置文件后,重新启动 Docker 服务。
    • 在 Windows 和 macOS 上,可以使用 Docker Desktop 的设置界面来配置 DNS 服务器。打开 Docker Desktop,点击系统托盘上的 Docker 图标,选择 “Settings”,然后选择 “Daemon” 标签,在 “DNS” 部分添加所需的 DNS 服务器地址,保存更改后,重新启动 Docker。

在docker-compse中配置

如果你在Docker Compose中需要与daemon.json中的DNS配置保持一致,可以使用与daemon.json相同的DNS服务器配置。以下是一个示例的docker-compose.yml文件,其中将使用与daemon.json相同的DNS服务器配置:

version: '3'
services:
  myapp:
    image: myapp
    dns:
      - 127.0.0.11
      - 114.114.114.114
      - 8.8.8.8
    dns_search:
      - ""

在上述示例中,dns字段指定了与daemon.json相同的DNS服务器配置,dns_search字段设置为空字符串,表示不使用默认的搜索域。

挂载配置,挂载主机的resolv.conf

挂载路径

- "/etc/resolv.conf:/etc/resolv.conf"

127.0.0.11 解析服务器

127.0.0.11 是一个特殊的IP地址,它是 Docker 默认的 DNS 解析器。当你在 Docker 容器内部使用默认的 DNS 解析器时,容器会将 DNS 查询发送到 127.0.0.11 这个地址。

在 Docker 内部,容器会运行自己的 DNS 服务器,该服务器会处理容器内部的 DNS 查询。因此,当容器内部的应用程序需要进行 DNS 解析时,它们会将 DNS 查询发送到 127.0.0.11 这个地址。

127.0.0.11 只在 Docker 网络内部起作用,无法通过主机或其他网络访问。这个地址只用于容器内部的 DNS 解析。

进入容器使用ping测试

要进入容器并使用 ping 命令,你可以使用 docker exec 命令。以下是具体步骤:

  1. 首先,使用 docker ps 命令查看正在运行的容器列表,并找到你想要进入的容器的ID或名称。

  2. 运行以下命令进入容器的命令行终端:

    docker exec -it <容器ID或名称> /bin/bash
    

    这将以交互模式进入容器的命令行终端。如果容器中没有安装 bash,则可以尝试使用 /bin/sh 或其他可用的 shell。

  3. 进入容器后,你可以在命令行终端中执行 ping 命令,例如:

    ping <目标IP或域名>
    

    替换 <目标IP或域名> 为你想要 ping 的目标的 IP 地址或域名。

请注意,要使用 docker exec 命令进入容器,容器必须处于运行状态。如果容器已停止,请先使用 docker start 命令启动容器。

容器内测试DNS域名解析

要测试容器是否能够解析域名,你可以在容器内部使用 pingnslookup 命令。以下是两种方法:

  1. 使用 ping 命令测试域名解析:

    • 进入容器的命令行终端,可以使用上述提到的 docker exec 命令。
    • 在容器内部,运行 ping 命令并指定域名,例如:
      ping example.com
      
    • 如果容器能够解析域名并与之通信,则会显示类似以下的输出:
      PING example.com (93.184.216.34): 56 data bytes
      64 bytes from 93.184.216.34: icmp_seq=0 ttl=57 time=13.571 ms
      ...
      
  2. 使用 nslookup 命令测试域名解析:

    • 进入容器的命令行终端。
    • 在容器内部,运行 nslookup 命令并指定域名,例如:
      nslookup example.com
      
    • 如果容器能够解析域名,将会显示类似以下的输出:
      Server:    127.0.0.11
      Address 1: 127.0.0.11
      
      Name:      example.com
      Address 1: 93.184.216.34
      

请注意,以上命令仅在容器内部测试域名解析。如果容器内部的 DNS 配置不正确或者容器无法访问 DNS 服务器,可能会导致域名解析失败。

使用 dig 命令来执行域名解析

如果在容器内部执行 nslookup 命令时出现 “bash: nslookup: command not found” 的错误提示,这意味着容器中没有安装 nslookup 命令。

在某些基础镜像中,如Alpine等,可能不包含 nslookup 命令。你可以尝试使用其他可用的命令来测试域名解析。

一种替代方法是使用 dig 命令来执行域名解析。以下是使用 dig 命令的示例:

  1. 进入容器的命令行终端。
  2. 在容器内部,运行 dig 命令并指定域名,例如:
    dig example.com
    
  3. 如果容器能够解析域名,将会显示类似以下的输出:
    ; <<>> DiG 9.10.3-P4-Debian <<>> example.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34350
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;example.com.            IN      A
    
    ;; ANSWER SECTION:
    example.com.     604800  IN      A       93.184.216.34
    
    ;; Query time: 2 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Mon May 10 15:32:39 UTC 2021
    ;; MSG SIZE  rcvd: 56
    

如果容器中没有安装 dig 命令,你可以尝试使用其他可用的命令,如 ping 或者 curl 来测试域名解析。

安装dig命令到linux服务器

要在Linux系统上安装dig命令,你可以按照以下步骤进行:

  1. 打开终端或命令提示符。

  2. 使用适用于你的Linux发行版的包管理器来安装dig命令。以下是一些常见的Linux发行版的安装命令:

    • Debian 或 Ubuntu:

      sudo apt-get install dnsutils
      
    • CentOS 或 RHEL:

      sudo yum install bind-utils
      
    • Fedora:

      sudo dnf install bind-utils
      
    • Arch Linux:

      sudo pacman -S bind-tools
      

    根据你的发行版,运行适合的命令来安装dig命令。

  3. 安装完成后,你可以在终端中运行dig命令来执行域名解析。例如:

    dig example.com
    

这样你就可以在Linux系统上使用dig命令进行域名解析了。

“Unable to locate package dnsutils” 的错误

如果在安装 dnsutils 过程中遇到 “Unable to locate package dnsutils” 的错误提示,这意味着你所使用的发行版的软件源中没有该软件包。

dnsutils 是一个常用的网络工具包,其中包含了 dig 命令,用于执行域名解析等操作。

在某些发行版中,dnsutils 可能被命名为其他名称,或者不包含在默认的软件源中。你可以尝试以下几种解决方法:

  1. 更新软件包列表:运行以下命令以更新软件包列表,然后再次尝试安装 dnsutils

    • Debian 或 Ubuntu:

      sudo apt update
      
    • CentOS 或 RHEL:

      sudo yum update
      
    • Fedora:

      sudo dnf update
      
  2. 检查软件包名称:在某些发行版中,dnsutils 被称为 bind-utils。尝试安装 bind-utils

    • Debian 或 Ubuntu:

      sudo apt install bind9-dnsutils
      
    • CentOS 或 RHEL:

      sudo yum install bind-utils
      
    • Fedora:

      sudo dnf install bind-utils
      
  3. 检查软件源:你可能需要添加其他软件源或更新软件源配置以确保 dnsutils 可用。你可以查阅你所使用发行版的文档,了解如何添加或更新软件源。

如果以上方法都不可行,你可以尝试搜索其他适用于你的发行版的替代工具包,或者联系发行版的社区或管理员,寻求支持和建议。

请注意,不同的发行版和版本可能具有不同的软件包名称和软件源配置。

刷新DNS缓存

要刷新DNS缓存,具体的步骤取决于你所使用的操作系统。以下是几个常见操作系统的刷新DNS缓存的方法:

  1. Windows系统:

    • 打开命令提示符(CMD)窗口,可以通过按下Win键+R,然后输入cmd并按下回车键来打开。
    • 在命令提示符窗口中,输入以下命令并按下回车键:
      ipconfig /flushdns
      
  2. macOS系统:

    • 打开终端应用程序,可以通过按下Command键+空格键,然后输入“终端”来打开。
    • 在终端窗口中,输入以下命令并按下回车键:
      sudo killall -HUP mDNSResponder
      
  3. Linux系统:

    • 打开终端应用程序。
    • 在终端窗口中,输入以下命令并按下回车键:
      • Ubuntu/Debian:
        sudo systemctl restart systemd-resolved
        
      • CentOS/Fedora:
        sudo systemctl restart NetworkManager
        

请注意,刷新DNS缓存可能需要管理员权限,因此在Windows和macOS系统上,你可能需要以管理员或超级用户的身份运行命令。

刷新DNS缓存后,你的计算机将重新查询DNS服务器以获取最新的域名解析结果。

使用curl测试目标网站

你可以使用 curl 命令行工具来测试访问目标网站。下面是一个使用 curl 访问目标网站的示例命令:

curl https://api.weixin.qq.com/cgi-bin/token //替换为你自己解析的域名url

这个命令会向 https://api.weixin.qq.com/cgi-bin/token 发送一个 GET 请求,并将服务器的响应输出到终端。

请确保你的计算机已经安装了 curl 命令行工具,并且能够通过终端或命令提示符来运行。

运行上述命令后,观察终端输出,你将看到目标网站的响应结果。如果能够成功获取响应,那说明目标网站可以正常访问。

猜你喜欢

转载自blog.csdn.net/gao511147456/article/details/133233228