【问题标题】:Docker container cannot resolve hostsDocker 容器无法解析主机
【发布时间】:2016-04-29 09:26:42
【问题描述】:

从我的主机我可以 ping 谷歌

$ cat /etc/resolv.conf 
nameserver 127.0.1.1
search my.company.server

$ ping google.com
PING google.com (172.217.16.174) 56(84) bytes of data.
64 bytes from fra15s11-in-f14.1e100.net (172.217.16.174): icmp_seq=1 ttl=54 time=11.0 ms
64 bytes from fra15s11-in-f14.1e100.net (172.217.16.174): icmp_seq=2 ttl=54 time=10.7 ms

从容器中我可以访问互联网:

$ docker run ubuntu:14.04 cat /etc/resolv.conf
search my.company.server
nameserver 8.8.8.8
nameserver 8.8.4.4


$ docker run ubuntu:14.04 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=16.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=45 time=16.3 ms

但无法 ping 主机名:

$ docker run ubuntu:14.04 ping google.com
<no answer>

一些环境信息:

$ docker --version
Docker version 1.10.1, build 9e83765

$ cat /proc/version
Linux version 4.2.0-27-generic (buildd@lgw01-12) (gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2) ) #32-Ubuntu SMP Fri Jan 22 04:49:08 UTC 2016

$ cat /proc/sys/net/ipv4/ip_forward
1

$ ps -ef|grep [d]ocker
root   ....... /usr/bin/docker daemon -H fd://

与此类似: Docker container can reach DNS but not resolve hosts

但重启没有帮助...

【问题讨论】:

  • 如果你运行这个会发生什么? docker run --dns=8.8.8.8 ubuntu:14.04 ping google.com
  • 那行不通... :(
  • 我也有同样的问题
  • 你的 docker 版本是多少?
  • 我在 Docker 版本 17.12.1-ce 上得到这个,构建 7390fc6

标签: ubuntu docker dns


【解决方案1】:

默认情况下,创建一个新的 docker 容器也会创建一个虚拟网络,将 docker 网络环境与主机网络环境(在某种程度上)分开。这允许您轻松启动多个容器,这些容器可能都侦听同一端口(例如 80),但可以映射到主机上的唯一端口(例如 service1:80 -> host:8080, service2: 80 -> 主机:8081)。

docker run YOUR_IMAGE --network="host" 将容器网络适配器绑定到主机的网络适配器。这应该允许您通过主机的侦听端口访问主机。例如localhost:8080 但是您需要记住,端口是一种稀缺资源,当您这样做时,不同容器中的端口侦听器不能冲突。

您还可以根据您的操作系统和 docker 版本从 docker 容器中检索主机的 IP 地址:

Mac/Windows: 从 Docker v18.03+ 开始,您可以使用 host.docker.internal 主机名连接到您的 Docker 主机。

Linux: docker container run -e "DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')" 将使主机 IP 在 docker 容器中作为环境变量可用:DOCKER_HOST

【讨论】:

  • --network="host" 标志解决了我的 Fedora 32 机器上的问题。
  • 端口稀缺 -> 重启解决了我的问题,谢谢!
【解决方案2】:

错误的 docker 状态可能会触发您的问题。
你可以试试

sudo ip link delete docker0
sudo systemctl restart docker

【讨论】:

    【解决方案3】:

    我们在连接到 mongoDB 时遇到问题。当我们尝试从主机系统连接时,它正在工作,而从 docker 则失败。我们观察到docker没有正常启动,重启了docker。

    使用此命令重新启动: sudo systemctl restart docker

    【讨论】:

      【解决方案4】:

      基于Mac,应该去鲸鱼在Docker > Preferences > Docker Engine > Daemon

      {
      "debug": true,
      "experimental": false,
      "dns": ["8.8.8.8"]
      }
      

      更新并重新启动引擎。它应该修复它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        • 2017-04-12
        • 2019-12-24
        • 2018-02-13
        • 2020-06-18
        • 2018-04-21
        • 2018-10-23
        相关资源
        最近更新 更多