【问题标题】:Docker alias incorrectly resolved by application when container started容器启动时应用程序错误地解析 Docker 别名
【发布时间】:2019-05-30 22:58:25
【问题描述】:

我正在创建两个 docker-compose 文件(主要是因为我不想在开发应用程序时不断重启我的基础架构。)它们需要驻留在同一个 docker 网络上,以便它们可以使用别名进行连接。

这些文件类似于以下内容:

应用程序:

version: '3.5'

networks:
  default:
    name: kafka_network
    driver: bridge
services:
  client:
    build:
      context: .
      dockerfile: ./Dockerfile
    working_dir: /app/
    command: ./client
    environment:
      BADDR: kafka:9092
      CGROUP: test_group
      TOPICS: my-topic

基础设施:

version: '3.5'

networks:
  default:
    name: kafka_network
    driver: bridge

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - 2181:2181
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

我的问题是客户端无法正确解析 kafka:9092...它总是解析为 127.0.0.1:9092

错误:

Broker:  kafka:9092
Consumer_Group:  my_group
Topics:  [my-topic]
Created Consumer rdkafka#consumer-1
% Error: GroupCoordinator: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)

在本地运行时,它似乎运行良好,所以我真的很困惑可能是什么问题。如果有人对此有所了解,我将不胜感激!

本地:

[procyclinsur@P-428 client]$ ./client
Broker:  localhost:9092
Consumer_Group:  my-group
Topics:  [my-topic]
Created Consumer rdkafka#consumer-1
% AssignedPartitions: [my-topic[0]@unset]
% Message on my-topic[0]@0:
hello mate

【问题讨论】:

    标签: docker go apache-kafka confluent-platform


    【解决方案1】:

    这是与您的 Kafka 配置相关的问题 - 根本与 docker 无关。

    看:

      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
    

    这意味着您为您的 Kafka 设置了 2 个侦听器,您的客户在连接时将在 Kafka 的协议中收到这些侦听器。

    因此,当您在端口 9092 上连接时,您的客户端将尝试在“localhost”上获取 Kafka,而当您在端口 29092 上连接时,您的客户端将尝试在“kafka”DNS 名称上获取 Kafka。

    它在本地为您工作,因为您的 Kafka 容器通过 docker 端口部分暴露在 localhost:9092 上。

    这是很好地描述该主题的文章:https://rmoff.net/2018/08/02/kafka-listeners-explained/

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 2019-06-04
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多