Docker pull 卡在 DNS 阶段
近期在内网环境执行 docker pull 非常慢,明明没有变更,也要等待超过 90s。而且 docker pull jpillora/chisel 有问题,但 docker pull docker.io/jpillora/chisel 就没问题,预计问题在 DNS 处。
之前搞 在本地用 go tool 调试开放了 mTLS 入口的远程 Docker Daemon 就是为了这事,抓 goroutine 后清晰地看到是在做 DNS 解析。
root
http.(*conn).serve
http.serverHandler.ServeHTTP
mux.(*Router).ServeHTTP
http.HandlerFunc.ServeHTTP
http.HandlerFunc.ServeHTTP
otelhttp.NewMiddleware.func1.1
otelhttp.(*middleware).serveHTTP
http.HandlerFunc.ServeHTTP
server.(*Server).makeHTTPHandler.func1
authorization.(*Middleware).WrapHandler.func1
middleware.(*VersionMiddleware).WrapHandler.VersionMiddleware.WrapHandler.func1
middleware.(*ExperimentalMiddleware).WrapHandler.ExperimentalMiddleware.WrapHandler.func1
image.(*imageRouter).postImagesCreate
containerd.(*ImageService).PullImage
containerd.(*ImageService).pullTag
client.(*Client).Pull
client.(*Client).fetch
docker.(*dockerResolver).Resolve
docker.(*dockerResolver).resolveDockerBase
docker.(*dockerResolver).base
containerd.hostsWrapper.func1
daemon.(*Daemon).RegistryHosts
daemon.(*Daemon).mergeLegacyConfig
registry.(*Service).IsInsecureRegistry
registry.(*serviceConfig).isSecureIndex
registry.isCIDRMatch
net.LookupIP
net.(*Resolver).LookupIPAddr
net.(*Resolver).lookupIPAddr
runtime.selectgo
runtime.gopark分析代码和 sshdump 抓包确认在解析 registry-1.docker.io,在主机上 dig 验证确实卡住了。提示 Server failure,使用 1.1.1.1 验证上游正常,去重启了子路由后恢复了。