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

天真

我有 3 个 docker-compose 文件。一个启动kafka,另外两个是消费者和生产者。将其他 docker-compose 文件中的 external_links 添加到 kafka,但仍然无法从容器内部访问 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
一个板球运动员

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

  - KAFKA_ADVERTISED_HOST_NAME=localhost
  - KAFKA_ADVERTISED_PORT=9092

其次,仔细阅读bitnami image documentation,所有Kafka属性都以 开头KAFKA_CFG_,然后阅读有关内部/外部侦听器的部分

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

使用名称运行docker network create以与 Compose 分开设置外部桥接网络,然后将networks部分添加到该网络中的每个服务(Zookeeper、Kafka 和您的 Kafka 客户端)。然后确保它是外部的

networks:
  example-net:
    external: true

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从运行容器获取docker-compose.yml文件位置?

了解 docker-compose.yml 中容器的主机名

在没有docker-compose.yml文件的情况下杀死docker-compose容器

如何从独立容器连接到Docker Compose容器

如何设置database.yml以连接到Postgres Docker容器?

在 Docker 容器中连接到 Kafka 代理失败

如何仅使用docker-compose.yml创建数据容器?

如何从主机连接到数据库-在docker compose下运行的容器中的SQL Server

docker-compose 并连接到 Mongo 容器

Docker-compose:如何连接到mongo容器

从 docker-compose.yml 文件运行 docker 容器时遇到问题

如何从docker-compose.ci.build.yml文件构建和推送容器

将docker-compose.yml中的软件包安装到docker容器中

如何使用docker-compose.yml为在docker中运行的应用指定docker容器数据库?

使用docker-compose.yml中的命令等待Docker容器准备就绪

如何将对docker-compose.yml所做的更改实施到分离的运行容器中

无法从Logstash Docker容器连接到Kafka Docker容器

将Conduktor连接到Kafka Docker容器

如何创建docker-compose.yml文件

使用docker-compose.yml自动删除容器

Bash:从docker-compose.yml获取容器名称列表

docker compose 环境变量在 nodejs 容器中未定义

如何使用docker-compose而不是使用docker bridge从docker容器连接到localhost:9092

是否每个 docker compose yml 文件都与 AWS ECS 容器兼容

将我的容器入门文件翻译为docker-compose.yml

根据正在运行的容器在docker-compose.yml中创建服务

nodejs 容器不会连接到 redis 容器 docker-compose

Docker Compose - Redis 容器拒绝连接到 Node 容器

在 docker 容器中运行 kafka