【问题标题】:Different dns entries in docker container than hostdocker容器中的dns条目与主机不同
【发布时间】:2021-01-12 23:43:54
【问题描述】:

当我从我的 Ubuntu 系统 ping 一个 URL 时,它会正确解析为所需服务器的 IP。当我在容器中做同样的事情时,它会解析为其他一些 IP(我认为它是一个旧的 DNS 条目)。

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

更新

我使用以下命令运行容器:

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

ping 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

【问题讨论】:

  • 你能显示 ping 命令吗?
  • 我更新了问题。

标签: docker docker-networking


【解决方案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

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

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

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

【讨论】:

  • 任何图像都会显示相同的行为(我的域的 IP 不同)并且通过使用 --network=host 我得到正确的 Ip。
  • 一定是代理问题。谢谢
【解决方案2】:

你在代理后面吗?...您可以将 http_proxy 设置为容器中的环境变量..或作为构建目的的参数传递

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 2017-04-26
    • 1970-01-01
    • 2015-11-11
    • 2014-08-21
    • 2017-06-02
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多