如何从Windows主机访问WSL2中Docker运行的Kafka Broker
解决WSL2中Docker部署的Kafka无法被Windows主机访问的问题
修改后的docker-compose.yaml配置
services: broker: image: apache/kafka:latest container_name: broker ports: - "9092:9092" - "9093:9093" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://host.docker.internal:9092 KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@broker:9093 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_NUM_PARTITIONS: 3
关键修改说明
- 端口映射:新增
ports字段,将容器的9092、9093端口映射到WSL2主机的对应端口,打通Windows主机到容器的网络通路。 - 监听地址调整:把
KAFKA_LISTENERS中的localhost改为0.0.0.0,让Kafka监听容器所有网卡接口,接受外部连接请求。 - 通告地址优化:
KAFKA_ADVERTISED_LISTENERS使用host.docker.internal,这个地址在WSL2和Windows环境中会自动解析为可访问的宿主IP,团队成员无需各自配置WSL私有IP,统一用这个地址即可。 - 内部通信修正:
KAFKA_CONTROLLER_QUORUM_VOTERS改用容器名broker替代localhost,避免容器内部控制器通信的解析问题,保证Broker自身运行稳定。
Windows主机侧Python连接配置
调整脚本中的bootstrap.servers为host.docker.internal:9092,示例代码:
from kafka import KafkaProducer # 初始化生产者 producer = KafkaProducer(bootstrap_servers='host.docker.internal:9092') # 示例:发送消息 producer.send('test_topic', b'Hello from Windows host') producer.flush()
验证步骤
- 重启Kafka容器:执行
docker-compose down && docker-compose up -d - 在Windows主机测试连通性:使用
telnet host.docker.internal 9092或nc -zv host.docker.internal 9092,能成功连通即说明配置生效。
内容的提问来源于stack exchange,提问作者ff8mania
相关产品推荐
相关产品推荐

