【问题标题】:communication between containers connect fail容器之间的通信连接失败
【发布时间】:2018-12-22 23:39:50
【问题描述】:

我使用 docker,一个用于 zookeeper,另一个用于 kafka 我用 docker ps 码头工人ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
23dbed8536dc        dc62102ccd75        "/opt/startkafka.sh"     4 minutes ago       Up 4 minutes                                                         inspiring_nobel
8f89ce6a4b57        00088267fb34        "/opt/startzookeeper…"   7 minutes ago       Up 7 minutes        2888/tcp, 192.168.1.5:2181->2181/tcp, 3888/tcp   vigorous_zhukovsky

kafka config 连接到 zookeeper 是

zookeeper_connect=localhost:2181

当我 docker 运行 kafka 容器时

[2018-07-15 01:31:58,369] INFO 打开与服务器的套接字连接 本地主机/127.0.0.1:2181。不会尝试使用 SASL 进行身份验证 (未知错误) (org.apache.zookeeper.ClientCnxn) [2018-07-15 01:31:58,373] WARN Session 0x0 for server null,意外错误, 关闭套接字连接并尝试重新连接 (org.apache.zookeeper.ClientCnxn)java.net.ConnectException: 连接被拒绝 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 在 org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 在 org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141) [2018-07-15 01:31:59,479] 信息打开与服务器的套接字连接 本地主机/127.0.0.1:2181。不会尝试使用 SASL 进行身份验证 (未知错误) (org.apache.zookeeper.ClientCnxn) [2018-07-15 01:31:59,481] WARN Session 0x0 for server null,意外错误, 关闭套接字连接并尝试重新连接 (org.apache.zookeeper.ClientCnxn)java.net.ConnectException: 连接被拒绝 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 在 org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 在 org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)

我知道 kafka 容器无法连接到 zookeeper 更改卡夫卡配置 zookeeper_connect=192.168.1.5:2181

[2018-07-15 01:35:40,833] INFO 套接字连接建立到 192.168.1.5/192.168.1.5:2181,启动会话(org.apache.zookeeper.ClientCnxn)[2018-07-15 01:35:40,836] INFO 可能无法从服务器 sessionid 0x0 读取其他数据 服务器已关闭套接字,正在关闭套接字连接并尝试 重新连接(org.apache.zookeeper.ClientCnxn)[2018-07-15 01:35:42,520] 错误 KafkaServer 启动期间出现致命错误。准备关机 (kafka.server.KafkaServer) kafka.zookeeper.ZooKeeperClientTimeoutException:等待超时 连接状态:CONNECTING at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply$mcV$sp(ZooKeeperClient.scala:225) 在 kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply(ZooKeeperClient.scala:221) 在 kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected$1.apply(ZooKeeperClient.scala:221) 在 kafka.utils.CoreUtils$.inLock(CoreUtils.scala:250) 在 kafka.zookeeper.ZooKeeperClient.kafka$zookeeper$ZooKeeperClient$$waitUntilConnected(ZooKeeperClient.scala:221) 在 kafka.zookeeper.ZooKeeperClient.(ZooKeeperClient.scala:95) 在 kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1538) 在 kafka.server.KafkaServer.kafka$server$KafkaServer$$createZkClient$1(KafkaServer.scala:345) 在 kafka.server.KafkaServer.initZkClient(KafkaServer.scala:369) 在 kafka.server.KafkaServer.startup(KafkaServer.scala:202) 在 kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38) 在 kafka.Kafka$.main(Kafka.scala:92) 在 kafka.Kafka.main(Kafka.scala) [2018-07-15 01:35:42,523] 信息关闭 关闭(kafka.server.KafkaServer)[2018-07-15 01:35:42,525] 警告 (kafka.utils.CoreUtils$) java.lang.NullPointerException 在 kafka.server.KafkaServer$$anonfun$shutdown$5.apply$mcV$sp(KafkaServer.scala:569) 在 kafka.utils.CoreUtils$.swallow(CoreUtils.scala:85) 在 kafka.server.KafkaServer.shutdown(KafkaServer.scala:569) 在 kafka.server.KafkaServer.startup(KafkaServer.scala:326) 在 kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38) 在 kafka.Kafka$.main(Kafka.scala:92) 在 kafka.Kafka.main(Kafka.scala) [2018-07-15 01:35:42,528] 信息关闭 已完成(kafka.server.KafkaServer)[2018-07-15 01:35:42,528] 错误 离开卡夫卡。 (kafka.server.KafkaServerStartable) [2018-07-15 01:35:42,530] INFO 正在关闭 (kafka.server.KafkaServer)

我不知道如何让kafka容器连接到zookeeper容器,或者测试容器之间的连通性。 感谢您的任何建议!

【问题讨论】:

  • Kafka 是否在不同的主机上运行?还是连接到实际的本地主机?可以显示Dockerfile/docker-compose.yml吗?

标签: docker


【解决方案1】:

this example 一样,每个 kafka 节点应在运行时(在 docker run 上)引用 zookpeepr 集群节点的 IP:

docker run -p 9092:9092 \
  -e ZOOKEEPER_CONNECT=10.0.0.1:2181,10.0.0.2:2181,10.0.0.3:2181 \
  -e KAFKA_HOST=host_kafka1 -e KAFKA_PORT=9092 -e BROKER_ID=0 \
  --name kafka1 jeygeethan/kafka-cluster

大致思路是expressed here:

另外,如果您有一个名为 zk-01 的外部 zookeeper 服务器,那么您还需要传递 zookeeper.connect

docker run --tty --interactive --rm \
  --name kafka-01 \
  --publish 9092:9092 \
  --env SERVER__ZOOKEEPER_CONNECT=zk-01 \  <=============
  --env SERVER__BROKER_ID=1 \
  --env SERVER__COMPRESSION_TYPE=gzip \
  --link zk-01 \
  christiangda/kafka bin/kafka-server-start.sh config/server.properties

重点是:zookeeper 不在“localhost”上,但可以通过其 docker 容器名称访问。

【讨论】:

  • 阅读您的解决方案后,我尝试在撰写文件中添加主机名,但 2181 端口仍然无法访问 stackoverflow.com/q/64314622/958373
  • @Stephane 好的。我已经投票并关注了你的问题。
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
相关资源
最近更新 更多