如何修复Kafka Docker容器抛出0.0.0.0/0.0.0.0:2181:连接被拒绝?

如何修复Kafka Docker容器抛出0.0.0.0/0.0.0.0:2181:连接被拒绝?,docker,docker-compose,Docker,Docker Compose,我正在尝试为Kafka更改数据捕获设置Docker compose文件环境,但遇到以下错误: 正在打开到服务器0.0.0.0/0.0.0.0:2181的套接字连接。不会尝试使用SASL进行身份验证(未知错误) 发生套接字错误:0.0.0.0/0.0.0.0:2181:连接被拒绝 我一直在学习本教程,但它直接使用link选项运行docker命令,而不是使用docker-compose.yml文件 我试图转换这些: docker run -it --name kafka -p 9092:9092 -

我正在尝试为Kafka更改数据捕获设置Docker compose文件环境,但遇到以下错误:

正在打开到服务器0.0.0.0/0.0.0.0:2181的套接字连接。不会尝试使用SASL进行身份验证(未知错误)

发生套接字错误:0.0.0.0/0.0.0.0:2181:连接被拒绝

我一直在学习本教程,但它直接使用link选项运行docker命令,而不是使用docker-compose.yml文件

我试图转换这些:

docker run -it --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka
到下面的docker-compose.yml文件。但是,它似乎完全忽略了KAFKA_ZOOKEEPER_CONNECT环境变量,因为我在日志中看到:

使用ZOOKEEPER_CONNECT=0.0.0.0:2181

尽管如此,文档表明它应该可以工作

当我按照教程使用docker run而不是创建docker compose文件时,它完全可以正常工作。它显示本地计算机的IP地址,端口为2181,而不是0.0.0.0:2181

docker-compose.yml:

version: "3.7"

services:
  postgres:
    image: debezium/postgres:10
    container_name: postgres
    ports:
      - "5000:5432"
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
      # POSTGRES_USER: db_user
      # POSTGRES_PASSWORD: db_password
  zookeeper:
    image: debezium/zookeeper:1.5
    container_name: zookeeper
    ports:
      - "2181:2181"
      - "2888:2888"
      - "3888:3888"
  kafka:
    image: debezium/kafka:1.5
    container_name: kafka
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  connect:
    image: debezium/connect:1.5
    container_name: connect
    ports:
      - "8083:8083"
    environment:
      GROUP_ID: 1
      CONFIG_STORAGE_TOPIC: my-connect-configs
      OFFSET_STORAGE_TOPIC: my-connect-offsets
    depends_on: 
      - postgres
      - kafka
      - zookeeper

networks:
  default:
    name: kafkaCDC
Zookeeper容器上的zoo.cfg:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data
dataLogDir=/zookeeper/txns
clientPort=2181
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
这个问题已经研究了好几年了;然而,我完全迷路了。特别是,因为这么多的例子都在使用链接

这是GitHub的帖子,它让我想到使用KAFKA_ZOOKEEPER_CONNECT。


除了我之外,我觉得忽略环境变量是有问题的,但可能只是我不理解某些东西,并且有一个conf错误。

我能够通过将zookeeper连接地址设置为docker容器IP地址来修复它

要获取IP地址,请运行

docker inspect <container-name> --format='{{ .NetworkSettings.IPAddress }}'
docker-inspect--format='{{.NetworkSettings.IPAddress}'
然后开始卡夫卡,如下所示

docker run --name some-kafka -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT=<zookeeper-ip>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp-kafka
docker run--命名一些卡夫卡-p 9092:9092-e kafka_ZOOKEEPER_CONNECT=:2181-e kafka_advised_LISTENERS=纯文本://:9092-e kafka_offset_TOPIC_REPLICATION_FACTOR=1 confluentinc/cp kafka

github comment帮助我找到了我缺少的内容

对于
debezium/kafka:1.5
图像,要在docker compose中工作,您可以尝试传递以下环境变量:

ZOOKEEPER\u连接:“ZOOKEEPER:2181”

它解决了我的问题,docker compose yaml示例如下:

版本:“3.9”
服务:
动物园管理员:
图片:debezium/zookeeper:1.5
端口:
- "2181:2181"
- "2888:2888"
卡夫卡:
图片:debezium/kafka:1.5
端口:
- "9092:9092"
环境:
ZOOKEEPER_CONNECT:“ZOOKEEPER:2181”
取决于:
-动物园管理员

请分享你的zoo.cfgfile@Ashok添加了zoo.cfg文件尝试增加客户端连接的最大数量仅从文件中添加未注释的maxClientCnxns=60。因此,它现在设置为60,即使重新启动,仍然不起作用。我不认为这是动物园管理员的问题,因为卡夫卡容器甚至不能与动物园管理员容器交谈。我认为0.0.0.0.0:2181是个问题,我只是不知道如何把它改成zookeeper:2181。另外,当我通过docker run运行它时,它会与maxClientCnxns一起运行。您运行过这个运行%ZOOKEEPER\u HOME%\bin\zkserver.cmd吗