容器化Kafka无法被同网络Python应用容器连接,报错NoBrokersAvailable求助
容器化Kafka无法被同网络Python应用容器连接,报错NoBrokersAvailable求助
我帮你排查了下,问题主要出在两个基础配置细节上,咱们一步步来解决:
第一个问题:Docker网络名称不匹配
你的Kafka/docker-compose.yml里定义的网络叫logging_network,但Python应用的docker-compose.yml里引用的是kafka_logging_network(还标记了external: true)——这两个是完全独立的Docker网络!容器不在同一个网络组里,自然没办法互相发现和通信。
修正方案:
统一使用同一个网络名称,推荐直接用kafka_logging_network:
- 先手动创建这个网络(避免启动时的命名冲突):
docker network create kafka_logging_network - 修改kafka/docker-compose.yml里的网络配置,把
logging_network替换成kafka_logging_network,并设置为外部网络:
同时把zoo1和kafka1服务下的networks: kafka_logging_network: driver: bridge external: truenetworks字段也改成kafka_logging_network,保持和上面一致。
第二个问题:Kafka的ZooKeeper连接地址写错了
在kafka1服务的环境变量里,你配置的是KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181',但你的ZooKeeper服务名是zoo1(不是zookeeper)!容器之间是通过服务名来通信的,这个错误会导致Kafka连不上ZooKeeper,根本无法正常启动,自然也就没有可用的Broker了。
修正方案:
把kafka1的这个环境变量改成:
KAFKA_ZOOKEEPER_CONNECT: 'zoo1:2181'
最后一步:重启服务验证
- 先停止并清理Kafka相关容器:
cd kafka && docker-compose down - 重新启动Kafka和ZooKeeper:
docker-compose up -d - 再重启Python应用容器:
cd ../app_folder && docker-compose down && docker-compose up
调整后,Python应用应该就能通过kafka1:29092成功连接到Kafka Broker了——你原来的KAFKA_ADVERTISED_LISTENERS配置是对的,PLAINTEXT://kafka1:29092就是给容器内部网络使用的监听地址,完全符合跨容器通信的场景。
备注:内容来源于stack exchange,提问作者John F
相关产品推荐
相关产品推荐

