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

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

1. 问题描述

zk配置如下:

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

#!/bin/shdocker rm -f myzookeeper1docker 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节点的访问地址。

相关文章:

  • 创建数据/采集数据+从PI数据到PC+实时UI+To PLC
  • Solaris11.4配置远程桌面登录
  • 基于SpringBoot+Vue的毕业设计选题管理系统
  • 一篇文章快速学会docker容器技术
  • 基于STM32设计的智能台灯(腾讯云IOT)(234)
  • DataLight(V1.4.5) 版本更新,新增 Ranger、Solr
  • 匿名管道在进程池中的应用案例
  • 【学习笔记】MIPI
  • Linux驱动开发(速记版)--平台总线
  • Java NIO 全面详解:掌握 `Path` 和 `Files` 的一切
  • C语言 | Leetcode C语言题解之第435题无重叠区间
  • go语言 常用的web框架
  • MySQL优化相关(持续积累...)
  • 电影票接口api对接有哪些优势?
  • 无源码实现免登录功能
  • 【EOS】Cleos基础
  • Angular Elements 及其运作原理
  • Angular6错误 Service: No provider for Renderer2
  • IDEA 插件开发入门教程
  • Javascript弹出层-初探
  • node-glob通配符
  • nodejs:开发并发布一个nodejs包
  • React-flux杂记
  • Redis在Web项目中的应用与实践
  • SQLServer之创建显式事务
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 产品三维模型在线预览
  • 成为一名优秀的Developer的书单
  • 从零搭建Koa2 Server
  • 经典排序算法及其 Java 实现
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漂亮刷新控件-iOS
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 详解移动APP与web APP的区别
  • 项目管理碎碎念系列之一:干系人管理
  • 一文看透浏览器架构
  • 追踪解析 FutureTask 源码
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​secrets --- 生成管理密码的安全随机数​
  • ​第20课 在Android Native开发中加入新的C++类
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • (175)FPGA门控时钟技术
  • (Git) gitignore基础使用
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (多级缓存)缓存同步
  • (二)WCF的Binding模型
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (已解决)vscode如何选择python解释器
  • (已解决)什么是vue导航守卫
  • (转)IOS中获取各种文件的目录路径的方法
  • .CSS-hover 的解释
  • .NET Core中的去虚
  • .net mvc部分视图