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

  1. Set the address to a valid host:port, e.g. CORE_PEER_ADDRESS=peer0.org1.example.com:7051.
  2. For IPv6, bracket the literal: [fd00::1]:7051, and strip any scheme prefix.
  3. 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

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


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/590b8afa3904fa4c. Report an issue: GitHub.