hyperledger/fabric · critical
peer address is not in the format of host:port: %v
Error message
peer address is not in the format of host:port: %v
What it means
In serve(), the peer parses CORE_PEER_ADDRESS (coreConfig.PeerAddress) with net.SplitHostPort to validate it has host:port form; a parse error is wrapped into this error and aborts peer startup. The peer address must be a valid host:port pair because it is advertised and used for gRPC bindings.
Source
Thrown at internal/peer/node/start.go:253
err = opsSystem.Start()
if err != nil {
return errors.WithMessage(err, "failed to initialize operations subsystem")
}
defer opsSystem.Stop()
metricsProvider := opsSystem.Provider
logObserver := floggingmetrics.NewObserver(metricsProvider)
flogging.SetObserver(logObserver)
chaincodeInstallPath := filepath.Join(coreconfig.GetPath("peer.fileSystemPath"), "lifecycle", "chaincodes")
ccStore := persistence.NewStore(chaincodeInstallPath)
ccPackageParser := &persistence.ChaincodePackageParser{
MetadataProvider: ccprovider.PersistenceAdapter(ccprovider.MetadataAsTarEntries),
}
peerHost, _, err := net.SplitHostPort(coreConfig.PeerAddress)
if err != nil {
return fmt.Errorf("peer address is not in the format of host:port: %v", err)
}
listenAddr := coreConfig.ListenAddress
serverConfig, err := peer.GetServerConfig()
if err != nil {
logger.Fatalf("Error loading secure config for peer (%s)", err)
}
serverConfig.Logger = flogging.MustGetLogger("core.comm").With("server", "PeerServer")
serverConfig.ServerStatsHandler = comm.NewServerStatsHandler(metricsProvider)
serverConfig.UnaryInterceptors = append(
serverConfig.UnaryInterceptors,
grpcmetrics.UnaryServerInterceptor(grpcmetrics.NewUnaryMetrics(metricsProvider)),
grpclogging.UnaryServerInterceptor(flogging.MustGetLogger("comm.grpc.server").Zap()),
)
serverConfig.StreamInterceptors = append(
serverConfig.StreamInterceptors,
grpcmetrics.StreamServerInterceptor(grpcmetrics.NewStreamMetrics(metricsProvider)),View on GitHub (pinned to 2736b63f8f)
Solutions
- Set the address to a valid host:port, e.g. CORE_PEER_ADDRESS=peer0.org1.example.com:7051.
- For IPv6, bracket the literal: [fd00::1]:7051, and strip any scheme prefix.
- Check core.yaml peer.address and the resolved env override for stray whitespace or empty values, then restart the peer.
Example fix
// before CORE_PEER_ADDRESS=peer0.org1.example.com // after CORE_PEER_ADDRESS=peer0.org1.example.com:7051
Defensive patterns
Strategy: validation
Validate before calling
addr := os.Getenv("CORE_PEER_ADDRESS")
if _, _, err := net.SplitHostPort(addr); err != nil {
return fmt.Errorf("CORE_PEER_ADDRESS must be host:port, got %q", addr)
} Try / catch
if err := startPeer(); err != nil && strings.HasPrefix(err.Error(), "peer address is not in the format of host:port") {
return fmt.Errorf("check CORE_PEER_ADDRESS / peer.address in core.yaml: %w", err)
} Prevention
- Always include an explicit port in CORE_PEER_ADDRESS / core.yaml peer.address.
- Bracket IPv6 literals and strip http:// prefixes and whitespace.
- Validate host:port format in deployment scripts before launching the peer.
When it happens
Trigger: Setting CORE_PEER_ADDRESS (or peer.address in core.yaml) to a value without a port, with an extra colon, with an invalid IPv6 literal without brackets, or otherwise unparsable by net.SplitHostPort.
Common situations: Writing `peer0.org1.example.com` with no `:7051` suffix; double-colon typos; unbracketed IPv6 addresses; leftover protocol prefixes like `http://` or trailing slashes; empty address value.
Related errors
- chaincode type not supported: %s
- failed to copy metadataDir directory folder: %s
- error unmarshalling YAML file %s: %s
- no endpoints
- subpolicy number %d type %T of policy %s is not convertible
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/590b8afa3904fa4c.
Report an issue: GitHub.