当前位置: 首页 > article >正文

使用容器启动的zk无法暴露3888问题解决

1. 问题描述

zk配置如下:

我通过容器启动了一个zk,通过-p 参数暴露了2181和3888端口,容器启动脚本如下:

#!/bin/sh

docker rm -f myzookeeper1

docker run  -p 12181:2181 -p 13888:3888  --name myzookeeper1  --restart always -d zookeeper:3.9.2

执行脚本启动容器后,在容器外curl 12181端口是可以curl通的,返回结果如下:

但是curl 13888端口的时候,curl不通,如下:

在容器内curl 3888是可以curl通的,如下:

可以看到,在容器内是可以curl通的。

在容器外使用tcpdump开启抓包,然后再次curl localhost:13888端口:

可以看出请求从主机(VM-4-12-centos)发送到了Docker容器的IP地址(172.17.0.3),但是容器返回了一个重置(RST)包。这通常表示容器内的服务没有在你所映射的端口上监听,或者防火墙配置阻止了访问。

2.解决过程

询问chatgpt后,给出以下可能的原因和解决方案:

  1. 服务未在正确端口监听

    • 确保Zookeeper服务在容器内的3888端口上正常运行,并且监听所有接口(通常是0.0.0.0)。
  2. 防火墙配置

    • 检查宿主机和Docker容器的防火墙设置,确保13888端口没有被阻止。
    • 在宿主机上,可以使用以下命令查看防火墙状态:
      sudo iptables -L
  3. Docker网络配置

    • 确保Docker网络没有配置问题。可以检查Docker网络配置:
      docker network ls
    • 如果使用自定义网络,确保容器能够正确地与外部通信。
  4. Docker运行参数

    • 确保在运行Docker容器时使用了正确的端口映射,命令格式为-p 宿主机端口:容器端口。确认你使用的命令是否是-p 13888:3888
  5. SELinux/AppArmor

    • 在某些系统上,SELinux或AppArmor可能会影响容器与宿主机之间的网络连接。可以尝试暂时禁用它们以进行排查。

排查过程:

1. 查看服务是否在正确端口监听

可以看出,3888端口只监听了127.0.0.1地址,所以在容器外是连接不上的,因此需要修改下配置文件:

将server.1的内容改为:0.0.0.0:2888:3888

重新启动后,在集群外可以curl通3888端口了。

3. 总结

对server.x=ip:2888:3888配置的理解

server.x配置的作用需要结合myid来理解

1. 当myid的内容和x的内容相同时,ip表示当前zk节点的2888和3888端口需要监听的网络接口地址,如果配置成127.0.0.1,在容器外是访问不到的,因此需要改成监听所有地址,即0.0.0.0。

2. 当myid的内容和x的内容不相同时,ip地址表示zk x节点的地址,因此需要配置成zk节点的访问地址。


http://www.kler.cn/news/329711.html

相关文章:

  • 创建Vue项目的时出现:无法加载文件 E:\software\node\node_global\vue.ps1,因为在此系统上禁止运行脚本
  • Android SQLite的基本使用、生成Excel文件保存到本地
  • 6.MySQL基本查询
  • 50. GLTF格式简介 (Web3D领域JPG)
  • 0708-指针和字符数组(上)(下)
  • 【不看会后悔系列】排序之——文件归并【史上最全详解】~
  • 数据结构之栈和队列——LeetCode:155. 最小栈,20. 有效的括号,1249. 移除无效的括号
  • Ktor快速上手1 - 第一个服务端项目
  • el-table表格点击该行任意位置时也勾选上其前面的复选框
  • OpenCV第十二章——人脸识别
  • 介绍篇| 爬虫工具介绍
  • 算法-汉诺塔问题(Hanoi tower)
  • Rust(1)基础语法
  • 【Python】探索自然语言处理的利器:THULAC 中文词法分析库详解
  • 【Redis】Redis中的 AOF(Append Only File)持久化机制
  • 【C++】set容器和map容器的基本使用
  • Acwing 容斥原理
  • Java try-catch结构异常处理机制与 IllegalArgumentException 详解
  • 基于YOLOv8的智能植物监测机器人
  • 探索机器人快换盘技术的未来之路:智能化与协作的革新
  • 解决 ERROR: PREPROCESSOR: MACROS TOO NESTED
  • Java工具--stream流
  • 【Linux】tar 压缩使用绝对路径时解压会出现多级文件夹
  • 显示adb报错,uniapp安装自定义基座
  • spring6启用Log4j2日志
  • MySQL高阶2066-账户余额
  • 本地部署开源在线PPT制作与演示应用PPTist并实现异地远程使用
  • 【python实操】python小程序之过七游戏以及单词单复数分类
  • Java - LeetCode面试经典150题(三)
  • 交换基础【计算机网络】