2017-08-17 115 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的參數傳遞