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


    命令配置

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

    1. 查看Docker的DNS配置:

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

      • 在 Linux 上,可以通过编辑 Docker 的配置文件 daemon.json 来配置 DNS 服务器。该文件通常位于 /etc/docker/ 目录下。可以使用以下命令打开配置文件:
        sudo nano /etc/docker/daemon.json
        
        • 1
        在配置文件中添加或修改 dns 字段,指定所需的 DNS 服务器地址,例如:
        {
          "dns": ["8.8.8.8", "8.8.4.4"]
        }
        
        • 1
        • 2
        • 3
        保存配置文件后,重新启动 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:
          - ""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    挂载路径

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

    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
      
      • 1

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

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

      ping <目标IP或域名>
      
      • 1

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

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

    容器内测试DNS域名解析

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

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

      • 进入容器的命令行终端,可以使用上述提到的 docker exec 命令。
      • 在容器内部,运行 ping 命令并指定域名,例如:
        ping example.com
        
        • 1
      • 如果容器能够解析域名并与之通信,则会显示类似以下的输出:
        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
        ...
        
        • 1
        • 2
        • 3
    2. 使用 nslookup 命令测试域名解析:

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

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

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

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

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

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

    1. 进入容器的命令行终端。
    2. 在容器内部,运行 dig 命令并指定域名,例如:
      dig example.com
      
      • 1
    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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

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

    安装dig命令到linux服务器

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

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

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

      • Debian 或 Ubuntu:

        sudo apt-get install dnsutils
        
        • 1
      • CentOS 或 RHEL:

        sudo yum install bind-utils
        
        • 1
      • Fedora:

        sudo dnf install bind-utils
        
        • 1
      • Arch Linux:

        sudo pacman -S bind-tools
        
        • 1

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

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

      dig example.com
      
      • 1

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

    “Unable to locate package dnsutils” 的错误

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

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

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

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

      • Debian 或 Ubuntu:

        sudo apt update
        
        • 1
      • CentOS 或 RHEL:

        sudo yum update
        
        • 1
      • Fedora:

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

      • Debian 或 Ubuntu:

        sudo apt install bind9-dnsutils
        
        • 1
      • CentOS 或 RHEL:

        sudo yum install bind-utils
        
        • 1
      • Fedora:

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

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

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

    刷新DNS缓存

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

    1. Windows系统:

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

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

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

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

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

    使用curl测试目标网站

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

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

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

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

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

  • 相关阅读:
    SpringBoot参数校验
    代码随想录——冗余连接(并查集)
    [DAX] BLANK函数 | ISBLANK函数
    猿创征文|【Vue3】插槽(Slot)基础使用
    LeetCode 1004.最大连续1的个数
    Java-IO流之字节输入流(中篇)
    公司官网建站笔记(六):域名进行公安备案并将备案号显示在网页底部
    web前端开发基础---制作表单类页面
    【python基础】编写/运行hello world项目
    【M malloc送书第二期】朋友圈大佬都去读研了,这份备考书单我码住了!
  • 原文地址:https://blog.csdn.net/gao511147456/article/details/133233228