如何从其他机器访问Windows上docker-compose部署的Kafka服务?
Windows Docker单节点Kafka跨局域网访问解决方案
修正后docker-compose配置
version: '3.7' services: zookeeper: image: wurstmeister/zookeeper:3.4.6 ports: - "0.0.0.0:2181:2181" expose: - "2181" volumes: - type: bind source: "G:\\path\\to\\zookeeper" target: /opt/zookeeper-3.4.6/data kafka: image: wurstmeister/kafka ports: - "0.0.0.0:9092:9092" expose: - "9092" environment: KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093, OUTSIDE://192.168.0.36:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT, OUTSIDE:PLAINTEXT KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092 KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_BROKER_ID: 1 KAFKA_LOG_DIRS: "/kafka" KAFKA_ALLOW_PLAINTEXT_LISTENER: 'true' volumes: - type: bind source: "G:\\path\\to\\logs" target: /kafka/ depends_on: - zookeeper
操作步骤
- 停止原有容器并清理残留数据卷,避免旧配置残留:
docker-compose down -v - 重新启动服务:
docker-compose up -d - 进入Kafka容器验证配置是否生效:
确保输出包含docker exec -it <kafka容器名> cat /opt/kafka/config/server.properties | grep advertised.listenersOUTSIDE://192.168.0.36:9092即为配置生效。
客户端测试代码(kafka-python)
from kafka import KafkaProducer, KafkaConsumer # 生产者测试 producer = KafkaProducer( bootstrap_servers=['192.168.0.36:9092'], # 替换为你部署的Kafka实际版本,wurstmeister latest镜像默认对应2.8.x版本 api_version=(2,8,0) ) producer.send('test_topic', value=b'test message') producer.flush() # 消费者测试 consumer = KafkaConsumer( 'test_topic', bootstrap_servers=['192.168.0.36:9092'], api_version=(2,8,0), auto_offset_reset='earliest', group_id='test_group' ) for message in consumer: print(f"收到消息: {message.value.decode()}")
异常排查
- 如果依旧报错,先确认宿主机器和客户端的9092端口连通性:在客户端执行
telnet 192.168.0.36 9092确认连通正常 - 检查kafka-python版本,建议升级到最新稳定版:
pip install --upgrade kafka-python - 确认WSL2端口映射规则未被其他占用,可执行
netsh interface portproxy show all查看已配置的映射规则
内容的提问来源于stack exchange,提问作者aSaffary
相关产品推荐
相关产品推荐

