【发布时间】:2017-04-27 21:56:16
【问题描述】:
我正在编写一个应该在 docker 容器中运行的小应用程序,并且应该通过其主机名与其他 docker 容器交互。
我正在尝试使用 net.LookupHost 获取服务器的 IP 地址,但我总是得到 127.0.53.53
奇怪的是,我可以使用 dns 工具(例如从同一个容器中挖掘)获得正确的 IP 地址。它只是在 go 程序中不起作用。
下面是我获取 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 镜像上运行。
下面是我在容器中的 resolv.conf:
search fritz.box
nameserver 127.0.0.11
options ndots:0
【问题讨论】:
-
你的 resolv.conf 是什么样的。当您要求提供裸主机名时,可能是解析器占用了您的域名?
-
搜索 fritz.box 名称服务器 127.0.0.11 选项 ndots:0
-
你安装了类似 pow 的东西吗?还是 docker 拦截。
-
@Doon 不,我没有安装 pow。只是裸露的高山图像。
标签: go docker containers