You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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()

验证步骤

  1. 重启Kafka容器:执行docker-compose down && docker-compose up -d
  2. 在Windows主机测试连通性:使用telnet host.docker.internal 9092或nc -zv host.docker.internal 9092,能成功连通即说明配置生效。

内容的提问来源于stack exchange,提问作者ff8mania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:36