netbirdio/netbird · error
startup check: no relay servers available (0/%d connected)
Error message
startup check: no relay servers available (0/%d connected)
What it means
Thrown by checkStartup (client/cmd/status.go:317). It counts relays whose URI starts with rel:// or rels:// from fullStatus.GetRelays() and errors only when at least one such relay exists but zero report Available. Management and signal are connected, but no relay is usable, so the startup check treats the agent as not fully up.
Source
Thrown at client/cmd/status.go:317
if !fullStatus.GetSignalState().GetConnected() {
return fmt.Errorf("startup check: signal not connected")
}
var relayCount, relaysConnected int
for _, r := range fullStatus.GetRelays() {
uri := r.GetURI()
if !strings.HasPrefix(uri, "rel://") && !strings.HasPrefix(uri, "rels://") {
continue
}
relayCount++
if r.GetAvailable() {
relaysConnected++
}
}
if relayCount > 0 && relaysConnected == 0 {
return fmt.Errorf("startup check: no relay servers available (0/%d connected)", relayCount)
}
return nil
}
func parseInterfaceIP(interfaceIP string) string {
ip, _, err := net.ParseCIDR(interfaceIP)
if err != nil {
return ""
}
return fmt.Sprintf("%s\n", ip)
}
View on GitHub (pinned to 93e97f4bf1)
Solutions
- Check the relay service status and its healthcheck endpoint
- Allow outbound connections to the relay hosts/ports (rel:// = plain, rels:// = TLS) from the agent host
- Inspect daemon logs for per-relay probe failures to identify which relay and why
- If relays were intentionally removed, clean the stale relay entries in management so relayCount drops to 0
Defensive patterns
Strategy: retry
Prevention
- Monitor relay health endpoints and alert before all relays drop
- Open egress for rel:// and rels:// ports alongside management and signal
- Remove decommissioned relays from management so stale entries do not trip the check
When it happens
Trigger: 'netbird status --check startup' when every relay in the network map fails its availability check: relay service down, rel:// or rels:// port blocked by egress firewall, or relay TLS/certificate problems. If no rel:// URIs exist at all (relayCount == 0), the check deliberately passes.
Common situations: Self-hosted relay container crashed; firewall permits management/signal but blocks relay ports; all relays removed from management but one stale entry remains; relay load balancer health checks failing.
Related errors
- startup check: management not connected
- startup check: signal not connected
- failed initializing log %v
- startup check: no full status available
- upload failed: %s
AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16).
Data as JSON: /api/errors/f86bce793afa65b7.
Report an issue: GitHub.