docker - Spring Boot 容器无法连接到 Kafka 容器

标签 docker spring-boot apache-kafka docker-compose

我正在尝试将微服务 Spring BootKafka 一起使用,但我的 Spring Boot 容器无法连接到 Kafka 容器。

docker-compose.yml:

version: '3'

services:

  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    restart: always
    ports:
      - 2181:2181

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    restart: always
    ports:
      - 9092:9092
    depends_on:
      - zookeeper
    links:
      - zookeeper:zookeeper
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

  consumer:
    image: consumer
    container_name: consumer
    depends_on:
      - kafka
    restart: always
    ports:
      - 8084:8080
    depends_on:
      - kafka
    links:
      - kafka:kafka

  producer:
    image: producer
    container_name: producer
    depends_on:
      - kafka
    restart: always
    ports:
      - 8085:8080
    depends_on:
      - kafka
    links:
      - kafka:kafka

application.properties in Consumer:

spring.kafka.consumer.bootstrap-servers=kafka:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic

application.properties 在生产者中:

spring.kafka.producer.bootstrap-servers=kafka:9092

但如果我在容器中运行 Kafka 并且在本地运行 Spring Boot 微服务,它就可以工作。

application.properties in Consumer:

spring.kafka.consumer.bootstrap-servers=0.0.0.0:9092
spring.kafka.consumer.group-id=WorkUnitApp
spring.kafka.consumer.topic=kafka_topic

application.properties 在生产者中:

spring.kafka.producer.bootstrap-servers=0.0.0.0:9092

什么问题,为什么 docker 中的 links 不起作用?

附言0.0.0.0 因为 mac os

已编辑

我在 docker-compose.yml 环境中添加到 kafka 但它仍然不起作用

  - KAFKA_ADVERTISED_PORT=9092

最佳答案

您需要将您的 Kafka 代理宣传为 kafka,这是所有链接容器的有效主机名(即客户端需要从 < strong>Kafka 协议(protocol)角度,所以 kafka:9092 是正确的,而不是 0.0.0.0):

kafka:
  ...
  environment:
    KAFKA_ADVERTISED_HOST_NAME: kafka

关于docker - Spring Boot 容器无法连接到 Kafka 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245398/

相关文章:

php - 在 Laravel 中使用 docker setlocale

python - Dockerfile 努力安装 Python Geopandas 模块

spring - Maven:trustAnchors 参数必须非空且为 'parent.relativePath' @ InvalidAlgorithmParameterException @ Non-resolvable Parent POM

spring-boot - Kafka 无法处理所有消息 - Java Spring Boot

hadoop - Apache Phoenix 4.7 csvBulkLoad.run()引发ClassNotFoundException

docker - 关于Docker容器内文件和文件夹的可用信息是什么?

amazon-web-services - 如何在 AWS Windows Server 环境中运行 Docker?

java.lang.AssertionError : Response content

java - Spring Data JPA 检查 SET 是否包含对象

java - Spring Kafka-Consumer.poll() 到底什么时候在幕后被调用?