csdn0811 2025-01-13 14:05 采纳率: 63%
浏览 23

容器的zookeeper的2181telnet后端口不通

这个是容器的zookeeper配置文件

img

为什么在宿主机telnet容器2181端口不通?

img

这又是什么问题?

[root@worker1 kafka_2.12-3.9.0]# bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
Connecting to localhost:2181
[2025-01-13 22:03:56,488] WARN Session 0x0 for server localhost/127.0.0.1:2181, Closing socket connection. Attempting reconnect except it is a SessionExpiredException. (org.apache.zookeeper.ClientCnxn)
EndOfStreamException: Unable to read additional data from server sessionid 0x0, likely server has closed socket
    at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77)
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1289)
KeeperErrorCode = ConnectionLoss for /brokers/ids
[2025-01-13 22:03:56,647] ERROR Exiting JVM with code 1 (org.apache.zookeeper.util.ServiceUtils)
  • 写回答

4条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-13 14:14
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题1: 在宿主机中telnet容器的2181端口不通的原因可能是由于防火墙或者网络配置的限制导致无法访问该端口。可以通过检查防火墙设置或者网络配置来确认是否存在阻止访问的规则。 案例:通过命令telnet 容器IP 2181检查能否连接成功
    telnet 容器IP 2181
    

    问题2: 根据提供的错误日志显示,连接到Zookeeper时出现了异常。错误信息显示无法读取服务器的额外数据,可能是服务器关闭了套接字连接。可能的原因包括Zookeeper服务未启动、配置错误或者网络连接问题。 案例:尝试重新启动Zookeeper服务,并检查Zookeeper配置是否正确

    # 重新启动Zookeeper服务
    bin/zookeeper-server-start.sh config/zookeeper.properties
    
    评论
  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你的描述和错误日志,你的ZooKeeper容器可能在运行时遇到了一些问题。主要原因可能有以下几点:

    1. ZooKeeper配置问题:你的ZooKeeper配置文件中的server配置看起来有些冗余或存在配置错误。你似乎指定了localhost以及其它两台机器作为集群成员,这可能导致冲突。一般来说,你需要确定集群的每一个成员节点的正确配置。通常配置形式应该是你的IP地址以及端口。你应该确认你需要的集群成员数量,并正确配置它们。此外,你需要确保这些机器之间可以正常通信。如果它们不在同一个网络中,或者防火墙阻止了它们之间的通信,那么连接会失败。如果这不是生产环境而是开发环境,请检查主机名(例如localhost)的正确性。确保每个节点的ZooKeeper数据目录中的数据是可用的。如果你的集群配置了正确,确保客户端可以从网络上的任何地方访问到这些节点。另外,确认你的端口号没有被其他服务占用。在你的情况下,端口号应该是你在配置文件中设置的端口,不是标准的ZooKeeper端口(通常为默认的端口是2888和3888)。在主机上使用telnet命令尝试连接到这些端口来确认它们是否开放。如果连接被拒绝,可能是防火墙或其他安全设置阻止了连接。尝试修改防火墙规则或配置安全组设置以允许访问这些端口。如果你的服务器已经在一个docker容器中运行,请确保docker容器的网络设置允许外部访问这些端口。此外,你的错误日志显示ZooKeeper会话关闭,这可能是由于连接丢失导致的。你需要确保你的网络连接没有问题,并且在重新尝试连接时考虑了足够的延迟和重试机制。根据你的网络环境和配置调整这些参数可能会有所帮助。如果问题仍然存在,你可能需要查看ZooKeeper的日志以获取更多关于问题的信息。确认日志文件没有受到存储空间的限制或者其他的问题导致的无法正常写入和存储。请注意在处理这类问题时要详细检查和排除各种可能的错误来源。这可能包括检查网络和主机级别的防火墙设置,以及容器的配置和网络设置等。这些都有可能导致ZooKeeper的连接失败或者运行不稳定等问题。通过分析和解决问题才能逐步解决问题并取得最终的成功部署和解决你所遇到的困境。综上所述你可以参考上述建议逐一排查问题所在并解决你的问题希望对你有所帮助!
    评论
  • 关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    从你的描述来看,你在宿主机上无法通过 telnet 访问容器内的 Zookeeper 的 2181 端口。这可能是由于几个原因导致的,包括端口映射问题、防火墙设置或者Zookeeper本身的配置问题。

    解决方案:

    1. 检查端口映射

      • 确认容器启动时是否正确映射了 2181 端口。
      • 使用 docker ps 命令查看容器运行状态和端口映射信息。确保输出中包含类似 0.0.0.0:2181->2181/tcp 的内容。
      docker ps
      
    2. 验证端口监听

      • 在宿主机上使用 netstatss 命令确认宿主机上是否有进程在监听 2181 端口。
      netstat -ntlp | grep 2181
      # 或者
      ss -tulnp | grep 2181
      
    3. 检查防火墙规则

      • 确认宿主机上的防火墙没有阻止外部访问 2181 端口。
      sudo iptables -L
      # 或者
      sudo firewall-cmd --list-all
      
    4. 验证Zookeeper配置

      • 检查Zookeeper的配置文件(如 zoo.cfg)以确保它监听所有接口或正确的IP地址。
      # 示例配置
      clientPort=2181
      # 如果需要监听所有接口
      # server.1=localhost:2888:3888
      # server.2=192.168.205.135:2888:3888
      # server.3=192.168.205.134:2888:3888
      
    5. 重启容器和服务

      • 有时简单的重启可以解决很多问题。
      docker restart <container_id>
      
    6. 检查日志

      • 查看容器的日志文件,了解是否有更详细的错误信息。
      docker logs <container_id>
      

    修改后的Docker命令示例:

    如果你发现端口未正确映射,可以通过以下命令重新启动容器:

    docker run -d --name my-zookeeper \
    -p 2181:2181 \
    -p 2888:2888 \
    -p 3888:3888 \
    zookeeper:latest
    

    通过以上步骤,你应该能够找到并解决问题所在。如果问题仍然存在,请提供更多的日志信息以便进一步分析。

    展开全部

    评论
  • GISer Liu 2025-01-13 17:31
    关注

    该回答引用自GPT-deepseek, 由博主 GISer Liu 编写:

    问题分析

    用户在宿主机上尝试通过 telnet 连接到容器的 Zookeeper 服务的 2181 端口时,发现连接不通。同时,用户在容器内使用 zookeeper-shell.sh 脚本连接 Zookeeper 时,也遇到了连接问题,并抛出了 EndOfStreamException 异常。

    问题定位

    1. 网络连接问题:宿主机无法通过 telnet 连接到容器的 2181 端口,可能是由于网络配置问题,如容器网络模式、防火墙设置、端口映射等。
    2. Zookeeper 服务问题:Zookeeper 服务可能没有正确启动,或者配置文件存在问题,导致服务无法正常监听 2181 端口。
    3. 容器配置问题:容器的网络配置可能存在问题,导致宿主机无法访问容器内的服务。

    解决方案

    1. 检查 Zookeeper 服务状态

    首先,确保 Zookeeper 服务在容器内已经正确启动,并且正在监听 2181 端口。

    # 进入容器
    docker exec -it <container_id> /bin/bash
    
    # 检查 Zookeeper 服务状态
    ps aux | grep zookeeper
    
    # 检查 Zookeeper 是否在监听 2181 端口
    netstat -tuln | grep 2181
    

    如果 Zookeeper 服务没有启动,或者没有监听 2181 端口,需要检查 Zookeeper 的配置文件 zoo.cfg,确保配置正确。

    2. 检查容器网络配置

    确保容器的网络配置正确,允许宿主机访问容器的 2181 端口。

    # 查看容器的网络配置
    docker inspect <container_id> | grep -i networkmode
    
    # 查看容器的端口映射
    docker port <container_id>
    

    如果容器使用的是 bridge 网络模式,确保端口映射正确配置。例如:

    docker run -d -p 2181:2181 <image_name>
    

    3. 检查防火墙设置

    确保宿主机和容器的防火墙没有阻止 2181 端口的通信。

    # 检查宿主机的防火墙规则
    iptables -L -n | grep 2181
    
    # 检查容器的防火墙规则
    docker exec -it <container_id> /bin/bash
    iptables -L -n | grep 2181
    

    如果防火墙阻止了 2181 端口的通信,需要添加相应的规则允许通信。

    4. 检查 Zookeeper 配置文件

    检查 Zookeeper 的配置文件 zoo.cfg,确保配置正确。特别是以下配置项:

    clientPort=2181
    

    确保 clientPort 设置为 2181,并且没有其他配置冲突。

    5. 检查容器日志

    查看容器的日志,检查是否有错误信息。

    docker logs <container_id>
    

    如果有错误信息,根据日志内容进行相应的调整。

    代码示例

    以下是一个简单的 Docker Compose 文件示例,用于启动 Zookeeper 服务并正确映射端口:

    version: '3'
    services:
      zookeeper:
        image: zookeeper:3.7.0
        ports:
          - "2181:2181"
        environment:
          ZOO_MY_ID: 1
          ZOO_SERVERS: server.1=zookeeper:2888:3888
    

    总结

    通过以上步骤,可以逐步排查并解决宿主机无法通过 telnet 连接到容器 Zookeeper 2181 端口的问题。首先确保 Zookeeper 服务在容器内正常运行并监听 2181 端口,然后检查容器的网络配置和防火墙设置,确保宿主机可以访问容器的服务。最后,检查 Zookeeper 的配置文件,确保配置正确。

    如果问题仍然存在,建议进一步检查容器的网络模式和宿主机的网络配置,确保网络通信正常。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    展开全部

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部