docker容器返回127.0.53.53中的golang net.LookupHost

docker容器返回127.0.53.53中的golang net.LookupHost,go,docker,containers,Go,Docker,Containers,我正在编写一个小应用程序,它应该运行在docker容器中,并且应该通过其主机名与其他docker容器交互 我试图使用net.LookupHost获取服务器的IP地址,但我总是得到127.0.53.53 奇怪的是,我可以使用dns工具(如dig)从同一个容器中获取正确的IP地址。它只在围棋程序中不起作用 下面是我的代码中获取IP地址的部分 zk_server_ips, err := net.LookupHost("zookeeper") addrs, err := net.LookupIP("te

我正在编写一个小应用程序,它应该运行在docker容器中,并且应该通过其主机名与其他docker容器交互

我试图使用net.LookupHost获取服务器的IP地址,但我总是得到127.0.53.53

奇怪的是,我可以使用dns工具(如dig)从同一个容器中获取正确的IP地址。它只在围棋程序中不起作用

下面是我的代码中获取IP地址的部分

zk_server_ips, err := net.LookupHost("zookeeper")
addrs, err := net.LookupIP("testserver")
if err != nil {
    fmt.Fprintf(w, "Failed to lookup ip address for testserver")
    return
}
for _, addr := range addrs {
if ipv4 := addr.To4(); ipv4 != nil {
    fmt.Fprintf(w, "IPv4: %s", ipv4)
}
我已经读了很多关于127.0.53.53是ICANN告诉我dsn设置有问题的方式,但我不知道为什么它使用的是dig and drill,而不是go代码

另外,设置docker容器以解析主机名的正确方法是什么

这些容器在Alpine linux映像上运行

以下是容器中的my resolv.conf:

search fritz.box
nameserver 127.0.0.11
options ndots:0
不要将其用于内部系统


如果需要为本地系统提供主机名,请使用保留用于此目的的
.local
TLD。

我在使用Telegraf时遇到了相同的问题

不幸的是,我不知道根本原因,但我可以通过在使用
docker run
时设置
--dns search=。
或在docker Compose v1 yaml文件中设置
dns\u search:。
来解决此问题:

telegraf:
  image: telegraf:1.2.1-alpine
  dns_search: .
  volumes:
    - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro

有关
--dns search
开关的详细信息,请参阅。

您的resolv.conf是什么样子的。当您要求裸主机名时,可能是解析程序使用了您的域名?搜索fritz.box nameserver 127.0.0.11选项ndots:0是否安装了类似pow的软件?或者docker拦截。@Doon不,我没有安装战俘。只是裸体的阿尔卑斯山图片。很抱歉我反应太晚了。问题是,这是由路由器dhcp服务器设置的,我必须找到一种方法来更改它,因为在路由器接口中没有位置可以执行此操作。但是,为什么它是从dns工具而不是从gethostbyname工作的呢?