Docker容器中不同于主机的dns条目

当我从我的ubuntu系统ping一个url时,它正确地parsing所需的服务器的IP。 当我在我的容器中做同样的事情时,它parsing为其他一些IP(我认为它是一个老的DNS入口)。

有谁知道为什么发生这种情况,以及如何解决?

——— ———-更新

我用下面的命令运行容器:

docker run -it -v $(pwd):/data-storage dotnet-testbed /bin/bash 

Pinging Google作品:

PING google.com (172.217.19.174): 56 data bytes 64 bytes from 172.217.19.174: icmp_seq=0 ttl=54 time=4.537 ms

ping myUrl显示错误的ip并卡住: PING myUrl (**.***.***.**): 56 data bytes

您可能会发现以下技术可用于调查您的Docker容器如何parsing主机…

search主机数据库 :

 🍔 docker run alpine getent hosts stackoverflow.com 151.101.1.69 stackoverflow.com stackoverflow.com 

检查主机文件 :

 🍔 docker run alpine cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 6a431f90415d 

检查通过docker run --add-host显式添加到容器主机文件的主机docker run --add-host

 🍔 docker run --name=my_cool_container -i -d --add-host stackoverflow.com:127.0.0.1 alpine sh 🍔 docker inspect -f '{{range $index, $value := .HostConfig.ExtraHosts}}{{$value}} {{end}}' my_cool_container stackoverflow.com:127.0.0.1 

但也许这与Docker没有太大的关系。 您应该在容器中运行ifconfig ,并检查其DNS服务器是否与您的主机相同。 您也可以使用dig来检查它接收的DNS答案。

如果这是一个“旧的DNS入口” 容器 (容器通常是短暂的),我会非常惊讶。 如果是这样:你可以通过重新部署容器来解决这个问题(或者学习如何清除它的DNScaching)。

最有可能的是:你的主机使用了一些代理,但是容器没有。 默认情况下,Docker容器使用网桥。 如果将其切换为使用主机networking :容器将使用主机的networking堆栈。 这可能足以使其受益于您的代理。

你是否在代理之后?…你可以在你的容器中设置http_proxy作为环境variables..或者作为构buildpurpouses的参数