hashicorp/nomad · error
unable to get address for service %q: %v
Error message
unable to get address for service %q: %v
What it means
Before building a Consul service registration for a task workload, Nomad resolves the advertised address/port via serviceregistration.GetAddress using the service's address, address_mode, and port_label against workload networks. Any failure there (unresolvable mode, unknown port label, no matching network) is wrapped in this message and registration aborts, returning nil registration.
Source
Thrown at command/agent/consul/service_client.go:1334
// Get the services ID
id := serviceregistration.MakeAllocServiceID(workload.AllocInfo.AllocID, workload.Name(), service)
sreg := &serviceregistration.ServiceRegistration{
ServiceID: id,
CheckIDs: make(map[string]struct{}, len(service.Checks)),
CheckOnUpdate: make(map[string]string, len(service.Checks)),
}
// Service address modes default to auto
addrMode := service.AddressMode
if addrMode == "" {
addrMode = structs.AddressModeAuto
}
// Determine the address to advertise based on the mode
ip, port, err := serviceregistration.GetAddress(
service.Address, addrMode, service.PortLabel, workload.Networks, workload.DriverNetwork, workload.Ports, workload.NetworkStatus)
if err != nil {
return nil, fmt.Errorf("unable to get address for service %q: %v", service.Name, err)
}
// Determine whether to use tags or canary_tags
var tags []string
if workload.Canary && len(service.CanaryTags) > 0 {
tags = make([]string, len(service.CanaryTags))
copy(tags, service.CanaryTags)
} else {
tags = make([]string, len(service.Tags))
copy(tags, service.Tags)
}
// newConnect returns (nil, nil) if there's no Connect-enabled service.
connect, err := newConnect(id, workload.AllocInfo, service.Name, service.Connect, workload.Networks, workload.Ports)
if err != nil {
return nil, fmt.Errorf("invalid Consul Connect configuration for service %q: %v", service.Name, err)
}
View on GitHub (pinned to 482b49bf1a)
Solutions
- Fix the service's port_label to match a port declared in the task group network block
- Set a supported address_mode ('auto', 'host', or 'alloc' as applicable) or remove it so 'auto' applies
- If using address_mode = 'driver', confirm the driver provides a DriverNetwork, else switch to 'host'/'alloc'
- Run `nomad job inspect`/plan output and verify the resolved network block contains the referenced port
Example fix
// before
service {
name = "api"
port = "htpp" // typo
}
// after
network {
port "http" {}
}
service {
name = "api"
port = "http"
} Defensive patterns
Strategy: validation
Validate before calling
// Ensure referenced port exists in the group network before submitting a job
func validateServicePort(s *structs.Service, ports map[string]structs.Port) error {
if s.PortLabel == "" { return nil }
if _, ok := ports[s.PortLabel]; !ok {
return fmt.Errorf("service %q references undeclared port %q", s.Name, s.PortLabel)
}
return nil
} Prevention
- Always declare service port labels in the task-group network block
- Use address_mode='auto' unless you specifically need host/driver
- Check `nomad job plan` output for address resolution before applying
- Ensure drivers requiring address_mode='driver' actually provide driver networks
When it happens
Trigger: getRegistrations (task service registration path) calls serviceregistration.GetAddress and it errors: port_label does not exist in workload.Ports/Networks, address_mode 'driver' with no DriverNetwork, 'host' mode with no static host port, or no network status present.
Common situations: Service references a port label typo'd or removed from the group's network block; address_mode = 'driver' on a driver that doesn't expose a network; consul connect services before network is assigned; IPv6/host_network misconfig.
Related errors
- address_mode = driver may only be set for Consul service che
- No port of label %q defined
- error parsing port label %q from service %q: %v
- error parsing port label %q from check %q: %v
- Check %q invalid: cannot use address_mode="driver", only che
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/8bc83bdb41a9a595.
Report an issue: GitHub.