Win10 GitBash下启动单Kafka容器后无法连接Broker求助
结合你遇到的情况,核心问题是Kafka对外宣传的地址(advertised address)和容器内部使用的连接地址不匹配,再加上Windows Docker的网络特性,给你几个可行的解决方案:
方案1:直接使用localhost:9092作为连接地址
你的broker-list.sh返回的是Kafka容器的Docker内部IP(比如172.17.54.145),但你在docker-compose.yml里设置了KAFKA_ADVERTISED_HOST_NAME: localhost——这意味着Kafka对外告知客户端自己的地址是localhost,当容器内的客户端用内部IP连接时,会出现路由不匹配的问题。
直接替换命令里的broker-list.sh结果为localhost:9092即可:
$KAFKA_HOME/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092 $KAFKA_HOME/bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
方案2:优化Kafka的监听配置(推荐)
wurstmeister Kafka镜像更推荐用KAFKA_LISTENERS和KAFKA_ADVERTISED_LISTENERS来配置地址,而非老旧的KAFKA_ADVERTISED_HOST_NAME。修改你的docker-compose-single-broker.yml:
version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: # 监听所有网卡的9092端口 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 # 容器内部用容器名访问,宿主机用localhost访问 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "test:1:1" volumes: - /var/run/docker.sock:/var/run/docker.sock
修改后重启容器:
docker-compose -f docker-compose-single-broker.yml down docker-compose -f docker-compose-single-broker.yml up -d
之后在容器内部可以直接用容器名kafka:9092连接:
$KAFKA_HOME/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server kafka:9092
方案3:适配broker-list.sh的Windows环境问题
如果一定要用broker-list.sh,可能是它在Windows GitBash下获取的IP不符合预期。这个脚本的逻辑是通过docker inspect获取Kafka容器的内部IP,但Windows Docker的网络环境中,内部IP可能无法被容器内客户端正确解析。
你可以手动替换broker-list.sh的输出为kafka:9092——因为Docker Compose会自动维护容器间的DNS解析,用容器名就能直接访问到Kafka服务。
内容的提问来源于stack exchange,提问作者JeyJ

