Docker Compose部署Kafka报无法绑定kafka:29092地址错误怎么排查
问题根因
错误出在KAFKA_LISTENERS配置项的写法:KAFKA_LISTENERS是Kafka进程用来绑定本地网卡的配置,不能直接填写服务名kafka作为监听地址。容器启动时Kafka进程尝试解析kafka域名绑定网卡,此时Docker Compose的服务名DNS解析还未生效,导致绑定失败抛出Cannot assign requested address错误。
配置逻辑说明
- 监听配置(
KAFKA_LISTENERS)需要绑定到容器所有网卡,用0.0.0.0作为地址,保证进程可以正常启动监听 - 广播配置(
KAFKA_ADVERTISED_LISTENERS)才需要填写外部可访问的地址,比如容器服务名kafka供Docker内部其他服务访问,localhost供宿主机访问
修正后的完整配置
version: "3.9" services: zookeeper: image: 'bitnami/zookeeper:latest' ports: - '2181:2181' environment: - ALLOW_ANONYMOUS_LOGIN=yes kafka: image: 'bitnami/kafka:latest' ports: - '9092:9092' environment: - KAFKA_BROKER_ID=1 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181 # 仅修改监听地址为0.0.0.0,其他配置逻辑不变 - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 depends_on: - zookeeper
修正后重启服务即可正常启动:Docker内部服务可通过kafka:29092访问Kafka,宿主机可通过localhost:9092访问Kafka。
内容的提问来源于stack exchange,提问作者dariush
相关产品推荐
相关产品推荐

