无法让docker和zookeeper连接docker

时间:2018-01-19 15:02:07

标签: docker

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

docker run zookeeperdocker run wurstmeister/kafka

我就这样运行它并且连接被拒绝了。在日志中它说:

  

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

然后:

  

WARN会话0x0表示服务器空,意外错误,关闭套接字   连接和尝试重新连接(org.apache.zookeeper.ClientCnxn)   java.net.ConnectException:拒绝连接

动物园管理员首先启动它,它在2181年,当启动卡夫卡时它看着2181“动物园管理员”然后炸毁了我。建议?

4 个答案:

答案 0 :(得分: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的容器名称作为主机:run -d -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092 -p 29092:29092 --network kafka_network --name kafka confluentinc/cp-kafka:latest

答案 1 :(得分:0)

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

获取Docker IP
  

docker ps

     

docker inspect

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

答案 2 :(得分:0)

这意味着zookeeper没有在本地主机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 

答案 3 :(得分:0)

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

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