当我尝试从 docker 容器获取“另一个容器名称”时,curl 首先尝试将该名称解析为 IPv6。这会导致几秒钟的延迟,因为无法通过 ipv6 访问 Web 服务器。
我删除了容器接口上的链接本地地址,并在容器的 lo 和 eth0 接口上禁用了 ipv6。 curl 仍然尝试首先将名称解析为 IPv6(除非通过curl -4 强制)。
这似乎是错误的。为什么即使禁用了 ipv6,curl 仍尝试将名称解析为 ipv6?
答案1
就我而言,全局禁用 IPv6 不起作用
我仍然看到 5 秒的“初始化”延迟。
只有-4
论证有效。 (与命令相同wget
)
我还尝试强制 iptables 拒绝 IPV6 流量。
↪ 没有任何改变
域名系统
我的测试表明,正是名称解析导致了这种延迟。
如果我卷曲基于 IP 的 URL,它会立即完成。
奇怪的是,名称解析本身nslookup
是即时的(并且不包含 IPV6 答案)
答案2
您可以通过编辑/etc/gai.conf
和取消注释来更改该行为precedence ::ffff:0:0/96 100
。
然而,这将影响的不仅仅是curl
。