2017-08-17 89 views
0

当我从我的ubuntu系统ping一个url时,它会正确解析所需服务器的IP。当我在我的容器中做同样的事情时,它解析为其他一些IP(我认为它是一个老的DNS入口)。码头集装箱中的不同dns条目比主机

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

--------- ----------更新

我运行下面的命令容器:

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

ping命令谷歌的工作原理:

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

查验myUrl显示了错误的IP和卡: PING myUrl (**.***.***.**): 56 data bytes

+0

你能显示ping命令吗? –

+0

我更新了问题。 – herm

回答

1

您可能会发现以下技术可用于调查Docker容器如何解析主机...

搜索hosts database

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

检查hosts file

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

但也许这并没有那么多的做多克。您应该在容器中运行ifconfig并检查其DNS服务器是否与您的主机相同。您也可以使用来检查它收到的DNS答案。

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

最有可能:有一些代理,您的主机使用,但容器没有。默认情况下,Docker容器使用桥接网络。如果你switch it to use host networking:容器将使用你的主机的网络堆栈。这可能足以使其从您的代理中受益。

+0

任何图像都将显示相同的行为(我的域的IP不同),并通过使用--network = host来获得正确的Ip。 – herm

+0

它一定是代理问题。谢谢 – herm

0

您是否在代理之后?...您可以将http_proxy设置为您的容器中的环境变量..或者作为构建purpouses的参数传递