go
network_error
ai_generated
true
rpc error: code = Unavailable desc = connection error: desc = "transport: error while dialing: dial tcp: lookup myservice on 8.8.8.8:53: no such host"
ID: go/grpc-unavailable-dns-probe
80%Fix Rate
87%Confidence
0Evidence
2024-10-01First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 1.20 | active | — | — | — |
| 1.21 | active | — | — | — |
Root Cause
The DNS server cannot resolve the gRPC service hostname, often due to incorrect DNS configuration or service name typo.
generic中文
DNS服务器无法解析gRPC服务主机名,通常是由于DNS配置错误或服务名称拼写错误。
Workarounds
-
90% success Use the service's IP address directly in the dial string.
conn, err := grpc.Dial("10.0.0.5:50051", grpc.WithInsecure()) -
85% success Add the hostname to /etc/hosts or use a custom resolver.
net.DefaultResolver = &net.Resolver{PreferGo: true, Dial: func(ctx context.Context, network, address string) (net.Conn, error) { d := net.Dialer{}; return d.DialContext(ctx, "udp", "192.168.1.1:53") }}
Dead Ends
Common approaches that don't work:
-
Adding a random retry delay.
95% fail
DNS resolution still fails; delay doesn't fix the lookup.
-
Changing the DNS server to a public one like 1.1.1.1.
70% fail
Public DNS may not have the private service record.