【问题标题】:Unable to get docker and zookeeper to connect docker无法让docker和zookeeper连接docker
【发布时间】:2018-06-28 20:40:41
【问题描述】:

我启动了以下两个容器,但 kafka 说连接被拒绝。

docker run zookeeperdocker run wurstmeister/kafka

我就这样运行它,但连接被拒绝。在日志中它说:

INFO 打开与服务器 localhost/127.0.0.1:2181 的套接字连接。 不会尝试使用 SASL 进行身份验证(未知错误) (org.apache.zookeeper.ClientCnxn)

然后:

WARN Session 0x0 for server null,意外错误,关闭套接字 连接并尝试重新连接(org.apache.zookeeper.ClientCnxn) java.net.ConnectException:连接被拒绝

zookeeper 首先启动并在 2181 上启动,当启动 kafka 时,它会查看 2181“zookeeper”然后炸毁我。建议?

【问题讨论】:

    标签: docker


    【解决方案1】:

    您好 Drew,您需要提供特定的 zookeeper docker 容器 IP。而不是 Kafka 配置中的 localhost。你可以通过运行获取 Docker IP

    码头工人ps

    码头检查

    并且您需要确保 Docker 容器能够相互通信。请参考以下https://docs.docker.com/engine/userguide/networking/default_network/container-communication/

    【讨论】:

    • 我们可以共享屏幕吗?我会支付你的时间。
    • 告诉我docker镜像我会帮你解决的
    • zookeeper 和 wurstmeister/kafka,我正在尝试使用图像 apache/nifi 发送模拟消息,我想用雅虎监视器监控它,但我仍然有问题。你也评论了那篇文章,我在stackoverflow.com/questions/48266949/… 找到了一个赏金,我在这有一段时间了,完全被卡住了。我正在学习 apache kafka 并使用 docker。
    • 您好,请给我您的电子邮件 ID,所有的东西都会邮寄给您
    【解决方案2】:

    有同样的问题。实际上有帮助的是:

    1. 创建桥接网络:docker network create -d bridge kafka-network

    2. 在此网络中运行 Zookeeper:docker run -d -p 2181:2181 --network kafka-network --name zookeeper zookeeper:latest 以及暴露端口 2181

    3. 运行 Kafka docker 将其连接到网络并使用 Zookeeper 的容器名称作为主机:docker run -d -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -p 9092:9092 --network kafka-network --name kafka confluentinc/cp-kafka:latest

    【讨论】:

      【解决方案3】:

      这意味着 zookeeper 没有在 localhost ip(127.0.0.1) 上运行。您需要通过

      显式获取它
      docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}' 
      

      上面的命令应该给你zoo-keeper的容器IP,可以用来启动Kafka服务器。

      总而言之,以下命令应该可以工作:

      docker run --name zookeeper  -p 2181:2181 -d zookeeper
      
      # if bash/zsh
      zk_ip=$(docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}')
      # if fish shell, do below
      # set -l zk_ip (docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}')
      
      docker run -p 9092:9092 --name kafka  \
       -e KAFKA_ZOOKEEPER_CONNECT=${zk_ip}:2181 \
       -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
       -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
       -d confluentinc/cp-kafka 
      
      

      【讨论】:

        【解决方案4】:

        使用 Docker 'host' 网络模式而不是默认的 'bridge' 模式可能会有所帮助,至少这是我项目的有效解决方案。 'host' 网络模式通过直接使用 Docker 主机的网络堆栈而不是创建一个隔离的 Docker 网络来绕过 IP 问题。

        例如看:https://github.com/mwatzer/kafka-connect-transforms-json-extractor-test/blob/main/docker/kafka/docker-compose.yml

        【讨论】:

          猜你喜欢
          • 2019-10-23
          • 1970-01-01
          • 2015-04-30
          • 1970-01-01
          • 2018-06-19
          • 1970-01-01
          • 2019-04-01
          • 2019-03-23
          • 2015-05-19
          相关资源
          最近更新 更多