我启动了以下两个容器,但kafka说连接被拒绝了。
docker run zookeeper
和docker 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“动物园管理员”然后炸毁了我。建议?
答案 0 :(得分:2)
有同样的问题。实际上是有帮助的:
创建网桥网络:docker network create -d bridge kafka-network
在此网络中运行Zookeeper:docker run -d -p 2181:2181 --network kafka_network --name zookeeper zookeeper:latest
以及公开端口2181
运行一个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 IPdocker 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问题。