Docker部署Zookeeper需选对镜像、配好端口、挂载数据目录、设清节点角色;单机用docker run一行启动,集群须用自定义网络、奇数节点、统一ZOO_SERVERS配置并验证状态。

用 Docker 部署 Zookeeper 很简单,关键在于选对镜像、配好端口、挂对目录、设清角色——单机开发够用,集群部署要守“奇数节点”原则。
拉取并运行单机版 Zookeeper
适合本地开发和测试,一行命令即可启动:
- 执行:docker run -d --name zoo1 -p 2181:2181 -p 2888:2888 -p 3888:3888 -v /path/to/zk/data:/data -v /path/to/zk/datalog:/datalog --restart always zookeeper:3.8.4
- 2181 是客户端连接端口,必须映射;2888 用于集群内 follower 与 leader 通信;3888 专用于 leader 选举
- /data 存快照(snapshot),/datalog 存事务日志(txlog),两者都建议挂载到宿主机,避免容器重启丢数据
- 推荐使用 3.8.x 或 3.9.x 版本(如 3.9.2),比老旧的 3.4 系列更稳定、安全补丁更全
通过 Docker Compose 启动(推荐方式)
结构清晰、便于后续扩展为集群,创建 docker-compose.yml:
- 内容示例:
version: '3.8' services: zoo1: image: zookeeper:3.9.2 restart: always ports: - "2181:2181" - "2888:2888" - "3888:3888" environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 volumes: - ./zoo1/data:/data - ./zoo1/datalog:/datalog - 运行:docker-compose up -d
- 这种方式天然支持环境变量注入,比纯命令行更易维护
搭建三节点 Zookeeper 集群
生产环境最低要求,需自定义网络 + 唯一 ID + 统一服务器列表:
- 先创建专用网络:docker network create zk-net
- 启动第一节点(zoo1):
docker run -d \ --name zoo1 \ --network zk-net \ -p 2181:2181 -p 2888:2888 -p 3888:3888 \ -e ZOO_MY_ID=1 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888;2181 server.2=zoo2:2889:3889;2182 server.3=zoo3:2890:3890;2183" \ -v $(pwd)/zoo1/data:/data -v $(pwd)/zoo1/datalog:/datalog \ --restart always \ zookeeper:3.9.2
- zoo2 和 zoo3 启动时分别改 ZOO_MY_ID 为 2/3,并调整对应端口映射(避免宿主机端口冲突)
- 所有节点必须在同一个 Docker 网络中,用容器名(如 zoo1)互相识别,不能用 localhost 或 127.0.0.1
验证与连通性检查
别只看容器 running,要确认服务真正就绪:
- 查状态:docker exec zoo1 zkServer.sh status —— 应返回 Mode: standalone 或 Mode: follower/leader
- 进容器测试:docker exec -it zoo1 zkCli.sh -server localhost:2181,然后输入 ls / 看是否返回根节点
- 从宿主机用客户端工具(如 IDEA ZooKeeper 插件、zkui)连 localhost:2181,能列出节点即成功
- 集群模式下,任意节点执行 stat 命令,应显示其他节点连接数和延迟



















