当前位置: 首页 > 知识库问答 >
问题:

Docker:如何连接到文件中未定义的kafka容器docker-compose.yml

蒋畅
2023-03-14

我有 3 个码头工人撰写文件。一个启动Kafka,另外两个是消费者和生产者。在 kafka 中添加了其他 docker 撰写文件中的external_links,但仍然无法从容器内部访问 kafka。从容器外部,我可以通过 localhost:9092 访问,但是在 docker 容器内部呢?

# docker-compose1.yml
version: "3.6"
services:
  zookeeper:
    image: 'docker.io/bitnami/zookeeper:3.7'
    container_name: zookeeper
    ports:
      - '2181:2181'
    volumes:
      - 'zookeeper_data:/bitnami'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  kafka:
    image: 'docker.io/bitnami/kafka:3'
    container_name: kafka
    ports:
      - '9092:9092'
    volumes:
      - 'kafka_data:/bitnami'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_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_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_ADVERTISED_HOST_NAME=localhost
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_AUTO_CREATE_TOPICS_ENABLE=true
    depends_on:
      - zookeeper


volumes:
  zookeeper_data:
    external: true
  kafka_data:
    external: true
# docker-compose2.yml
version: "3.6"
services:
  web:
    hostname: ocp-transmitter
    image: 'ocp/transmitter'
    command: bash -c "bundle install && foreman start"
    ports:
      - '3000:3000'
    volumes:
      - .:/app:cached
    stdin_open: true
    tty: true
    external_links:
      - kafka

共有1个答案

沈德寿
2023-03-14

首先,删除它们,它们已被弃用

  - KAFKA_ADVERTISED_HOST_NAME=localhost
  - KAFKA_ADVERTISED_PORT=9092

其次,更仔细地阅读bitnami图像文档,所有Kafka属性都以Kafka_CFG_开头,然后阅读关于内部/外部侦听器的部分

链接的答案是正确的多个docker-compse项目之间的通信

运行带有名称的docker网络创建以单独设置外部桥接网络,然后将网络部分添加到该网络中的每个服务(Zoo的,Kafka,和您的Kafka客户端)。然后确保它是外部的

networks:
  example-net:
    external: true

然后,您将在应用程序中使用kafka:29092,而不是本地主机,而不是端口9092

 类似资料:
  • 问题内容: 我有一个数据容器,该容器具有其他容器使用的卷(–volumes-from)。 数据容器被意外删除。 幸运的是,该卷没有删除。 有什么方法可以重新运行数据容器并将其指向该卷? 问题答案: 有什么方法可以重新运行数据容器并将其指向该卷? 当然,我在“如何从已删除的Docker容器中恢复数据?如何将其重新连接到数据?”中对此进行了详细说明。 您需要使用相同的VOLUME创建一个新容器(但 *

  • 我有一个数据容器,它有一个被其他容器使用的卷(-volumes from)。 数据容器意外被删除。 谢天谢地,卷没有被删除。 有什么方法可以重新运行数据容器并将其指向此卷?

  • 我正在尝试从另一个码头工人容器连接到 kafka docker 容器。但它没有连接。 为了运行kafka和zookeeper,我使用了docker compose文件: 容器docker compose 17138956372294708100 _ kafkatest . producer _ 1和docker compose 17138956372294708100 _ kafkatest .

  • 我拉出了mysql docker映像,并用命令运行容器: 此时,springBoot在本地工作。它与MySQL连接: 现在,我希望springBoot应用程序也在单独的docker容器上,在同一服务器上。为此,我使用了DockerFile: 同样,它无法连接到数据库:

  • 我试图用PHP、MariaDB和一个教程创建一个PHP开发环境,该教程建议使用Adminer进行数据库管理。因此,我生成了我的文件如下: 但是,当我为MariaDB设置卷时,在管理员登录页面中出现了一个错误。当我没有设置它们时,它似乎工作得很好。

  • 我无法将作为docker容器运行的应用程序连接到mongoDB。我知道新版本docker compose不推荐使用“链接”,所以我尝试使用自定义网络。我的码头工人。yml: 我的应用程序的Dockerfile: 当我运行时,我在应用程序中得到以下错误消息: 在第一次连接时连接到服务器[127.0.0.1:27017]失败[MongoNetworkError:连接ECONNREFUSED127.0.