Docker网络内Kafka通信失败外部正常,INTERNAL监听器配置问题排查
问题根源
你的Kafka监听器本身配置没有错误,报错是因为启动测试生产者容器时未加入Kafka服务所在的自定义Docker网络,导致生产者容器无法解析kafka服务名,也无法访问Kafka内部监听的9092端口。
原因说明
- 你在docker-compose.yml中自定义了名为
kafka的网桥网络,ZooKeeper、Kafka服务都加入了该网络,仅同网络内的容器可以通过服务名互相访问。 - 直接执行
docker run启动的容器默认接入Docker自带的默认网桥,和Kafka服务不在同一网络,自然无法连通INTERNAL监听器。
解决方法
任选其一即可:
- 启动生产者容器时指定加入Kafka所在网络,修改启动命令为:
docker run -d --name kafka_internal_test_producer --network kafka kafka_internal_test_producer
- 将测试生产者服务添加到原docker-compose.yml的services配置中,无需额外指定网络,同文件内的服务默认会共用声明的
kafka_network。
验证方式
修复后可以先进入生产者容器执行以下命令验证连通性:
- 执行
ping kafka确认服务名可以正常解析 - 执行
nc -zv kafka 9092确认端口可连通
内容的提问来源于stack exchange,提问作者GerbGerb
相关产品推荐
相关产品推荐

