Docker容器外部无法连接Kafka服务报DNS解析失败如何解决?
问题根因
报错核心是两处配置不匹配:
- Kafka容器内监听的外部端口和docker端口映射规则不一致
- 外部监听器绑定地址限制了仅容器本地可访问
此前telnet端口连通正常是因为端口映射到了内部监听的9092端口,但Kafka返回给客户端的broker地址是内部服务名kafka:9092,宿主机无法解析该内网域名,因此产生DNS报错。
步骤1:修改docker-compose.yml配置
找到kafka服务的ports配置,将原有的- 9093:9092修改为- 9093:9093,修改后kafka服务配置如下:
kafka: image: 'bitnami/kafka:latest' container_name: kafka env_file: - kafka.env ports: - 9093:9093 depends_on: - zookeeper
步骤2:修改kafka.env配置
调整KAFKA_CFG_LISTENERS参数,将两个监听器的绑定地址改为0.0.0.0,允许所有来源的请求访问,修改后该参数为:
KAFKA_CFG_LISTENERS=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093
其余kafka.env、zookeeper.env配置保持不变即可。
步骤3:重启服务生效
执行以下命令清除旧容器配置残留并重新启动服务:
docker compose down -v docker compose up -d
验证
重新运行Python生产者代码即可正常发送消息,不会再出现DNS解析报错。
内容的提问来源于stack exchange,提问作者Emad Helmi
相关产品推荐
相关产品推荐

