Docker从入门到精通——为Docker指定DNS服务器

为Docker指定DNS服务器

  如果您的容器需要解析网络内部的主机,那么公共名称服务器就不够用了。你有两个选择:

    • 您可以指定 Docker 使用的 DNS 服务器,或者
    • dnsmasq 您可以在 NetworkManager 中禁用。如果您这样做,NetworkManager 会将您真正的 DNS 名称服务器添加到/etc/resolv.conf,但您会失去dnsmasq.

  您只需要使用其中一种方法。

一、为Docker指定DNS服务器

  配置文件的默认位置是/etc/docker/daemon.json--config-file 您可以使用 daemon 标志更改配置文件的位置。下面的文档假定配置文件位于/etc/docker/daemon.json.

  1. 创建或编辑 Docker daemon 配置文件,默认为 /etc/docker/daemon.jsonfile,控制 Docker daemon 配置。

     sudo nano /etc/docker/daemon.json
  2. 添加dns具有一个或多个 IP 地址作为值的键。如果文件已有内容,您只需添加或编辑该dns行。

    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }

    如果您的内部 DNS 服务器无法解析公共 IP 地址,请至少包含一个可以解析的 DNS 服务器,以便您可以连接到 Docker Hub,以便您的容器可以解析 Internet 域名。

    保存并关闭文件。

  3. 重新启动 Docker 守护程序。

    
    
    sudo service docker restart
    
    
  4. 验证 Docker 是否可以通过尝试拉取镜像来解析外部 IP 地址:

    
    
    docker pull hello-world
  5. 如有必要,验证 Docker 容器是否可以通过 ping 解析内部主机名。

     docker run --rm -it alpine ping -c4 <my_internal_host>
    
    PING google.com (192.168.1.2): 56 data bytes
    64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms
    64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms
    64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms
    64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms

二、禁用dnsmasq

  1) Ubuntu

  如果您不想更改 Docker 守护程序的配置以使用特定 IP 地址,请按照这些说明dnsmasq在 NetworkManager 中禁用。

  1. 编辑/etc/NetworkManager/NetworkManager.conf文件。

  2. dns=dnsmasq通过在行首添加一个#字符来注释掉该行。

    dns=dnsmasq

    保存并关闭文件。

  3. 重新启动 NetworkManager 和 Docker。作为替代方案,您可以重新启动系统。

     sudo systemctl restart network-manager
     sudo systemctl restart docker
  2) RHEL、CentOS 或 Fedora

  dnsmasq 要在 RHEL、CentOS 或 Fedora 上禁用:

  1. 禁用dnsmasq服务:

     sudo systemctl stop dnsmasq
     sudo systemctl disable dnsmasq
  2. 使用Red Hat 文档手动配置 DNS 服务器。

posted @ 2022-06-08 14:08  左扬  阅读(783)  评论(0编辑  收藏  举报
levels of contents