You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内Spring应用连接Kafka失败:无法建立节点连接

问题:Docker容器中Spring应用无法连接Kafka Topic

我尝试在Docker容器中运行Spring应用,希望应用能与Kafka Topic通信,但执行时出现错误:

Connection to node 1001 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

请问我哪里配置出错了?


相关配置信息

Dockerfile

FROM openjdk:11-jre-slim
#WORKDIR /usr/local/java
SHELL ["bash", "-c"]
ADD target/integration-service-exec.jar app.jar
ADD entrypoint.sh entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN touch /app.jar
# Install prerequisites
RUN apt-get update && apt-get install -y curl jq wget
RUN wget -O dd-java-agent.jar 'https://search.maven.org/classic/remote_content?g=com.datadoghq&a=dd-java-agent&v=0.103.0'
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

docker-compose.yml

version: '3.8'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: integration-service.zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: wurstmeister/kafka
    container_name: integration-service.kafka
    ports:
      - "9092:9092"
      - "9094:9094"
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: integration-service.zookeeper:2181
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_LISTENERS: INTERNAL://0.0.0.0:9094,OUTSIDE://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://integration-service.kafka:9094,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
  redis:
    image: bitnami/redis:latest
    ports:
      - 6379:6379
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
  application:
    container_name: app
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - kafka
      - redis

Spring Boot配置文件application.yml

spring.cloud.stream:
  binders:
    kafkasip:
      type: kafka
      environment:
        spring.cloud.stream.kafka.binder:
          autoCreateTopics: true 
          autoAddPartitions: true
          healthTimeout: 10
          requiredAcks: 1
          minPartitionCount: 1
          replicationFactor: 1
          configuration:
            auto.offset.reset: earliest
          headerMapperBeanName: customHeaderMapper
          brokers: 0.0.0.0:9094
# tried also with :localhost:9092 but same error....

问题分析与解决

核心问题是Spring应用容器内的Kafka连接地址配置错误:

  • 在Docker Compose网络中,容器之间通过服务名/容器名通信,localhost在容器内指向自身而非宿主机,0.0.0.0是监听地址而非可连接的目标地址,这两个都无法正确指向Kafka容器。
  • 你的Kafka容器名是integration-service.kafka,内部监听端口是9094(对应INTERNAL listener),这才是Spring应用在Docker网络中应该使用的连接地址。

修改步骤

修改application.yml中的brokers配置,将其改为:

brokers: integration-service.kafka:9094

额外注意事项

depends_on仅保证容器启动顺序,不确保Kafka服务完全就绪。如果仍有连接问题,可以在应用启动脚本中添加等待逻辑,比如通过nc命令检查Kafka端口是否可用后再启动应用。


内容的提问来源于stack exchange,提问作者user1671106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:10:43