【问题标题】:Unable to resolve domain names inside docker container无法解析 docker 容器内的域名
【发布时间】:2018-01-27 15:56:57
【问题描述】:

我正在我的 Windows PC 上的 virtualbox 中运行一个 linux VM。我在虚拟机中安装了 docker。然后我使用 docker run -it alpine 启动了一个 alpine 容器。

在这个容器中,我可以成功 ping 外部 IP。但是当我尝试 ping 域名时,例如google.com,它总是返回ping: bad address 'google.com'

如果我做nslookup google.com,它会告诉我can't resolve 'google.com'。但是所有这些操作都可以在VM中(容器外)成功完成。

在容器的 /etc/resolv.conf 中是 Google DNS 服务器,8.8.8.88.8.4.4。而对于 VM,它是 127.0.1.1

有人知道类似的问题吗?

【问题讨论】:

  • sudo service docker restart 为我工作。

标签: docker dns containers


【解决方案1】:

这个(相对)老问题是由于 musl DNS 库的错误实现,如 a comment of gliderlabs/docker-alpine #539 所述。

$ docker run -it --rm alpine:3.4 nslookup google.com
nslookup: can't resolve '(null)': Name does not resolve

Name:      google.com
Address 1: 216.58.200.46 tsa01s08-in-f46.1e100.net
Address 2: 2404:6800:4012:1::200e tsa03s06-in-x0e.1e100.net

在较新版本的 alpine 中,这似乎已修复,因为 alpine 版本 >= 3.11.3 使用 DNS 解析的内部实现,而不是 musl 的实现。

$ docker run -it alpine nslookup google.com
Server:     192.168.65.1
Address:    192.168.65.1:53

Non-authoritative answer:
Name:   google.com
Address: 2404:6800:4012:1::200e

Non-authoritative answer:
Name:   google.com
Address: 172.217.160.110

【讨论】:

    【解决方案2】:

    尝试在/etc/docker/daemon.json 中添加{ "dns": ["8.8.8.8", "8.8.4.4"] }

    【讨论】:

    • 顺序很重要。内部 dns 应该在外部 dns 地址之前
    【解决方案3】:

    在 VM 下运行时,我遇到了类似的问题。您可以将 DNS 服务器放在 docker run 命令中。

    docker run -it --dns 8.8.8.8 --dns 8.8.4.4 alpine
    

    【讨论】:

      【解决方案4】:

      取决于您工作的网络。

      在默认网络中,容器继承主机的 DNS 设置,如/etc/resolv.conf 配置文件中定义的那样

      当您使用自定义网络时,将使用 Docker 的嵌入式 DNS 服务器,它将外部 DNS 查找转发到主机上配置的 DNS 服务器。

      在这两种情况下,您都不应编辑容器的 /etc/resolv.conf。这是由 Docker 完成的。

      【讨论】:

        【解决方案5】:

        我从 docker 引擎中删除了 dns 配置,它解决了我的问题。

        Docker Desktop (Mac) > Docker Engine > 移除 json 的 dns 部分并重启 docker。

        您还可以从以下位置编辑相同的文件:~/.docker/daemon.json

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多