惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

博客园 - 郭慕荣

彻底搞懂 Codex Skill 与插件:区别、试用、核心作用、项目落地全指南(程序员实战向) Codex Skill 和插件到底有什么区别?程序员如何在项目中落地使用 claudecode 配置防止配置文件泄露总结 Claude code分析外部文件总结 Claude code三种模式详解 hasCompletedOnboarding详解 Claudecode 有哪些常用的命令 claude.md文件详解 claude code 的setting文件详解 Mac中git ssh的配置(GitLab) Java 类加载机制 面试题(一) 如何监控和调优JVM性能? jvm常用的参数有哪些? 怎么配置? hashmap 和currenthashmap 的原理?详解一下 aop在项目中使用的场景?怎么使用? Java dubbo spring springboot中的spi机制 spring中常见的两种代理模式 Redis的zset 面试汇总 drools 规则引擎在线化配置 springcloud中常用的注解详解 springcloud中网关gateway总结 spring是怎么解决循环依赖的? MySQL 死锁 怎么处理? 在写left join的时候 是大表在左侧 还是小表在左侧(二) 在写left join的时候 是大表在左侧 还是小表在左侧(一) nacos客户端(接口调用者)如何感知被调用服务下线? (二) nacos客户端(接口调用者)如何感知被调用服务下线?(一) 在MySQL中 redolog undolog binlog 写入的场景,顺序
Docker部署zookeeper总结
郭慕荣 · 2026-01-19 · via 博客园 - 郭慕荣

 一、前置准备

确保本地已安装 Docker 环境(Docker Desktop 或 Docker Engine),验证 Docker 可用性:

# 查看 Docker 版本,验证环境正常运行
docker --version

二、第一步:选择并拉取 Zookeeper 镜像

1. 镜像来源(推荐官方稳定镜像)

Zookeeper 有 Docker Hub 官方维护镜像(zookeeper),版本齐全、更新及时、兼容性好,是首选方案,无需额外寻找第三方镜像。

2. 拉取 Zookeeper 镜像(核心命令)

# 拉取最新稳定版 Zookeeper 镜像(推荐,自动获取最新 LTS 版本)
docker pull zookeeper:latest

# 可选:指定具体稳定版本(如 3.8.4,避免版本变动带来的兼容问题)
docker pull zookeeper:3.8.4
  • 说明:Zookeeper 3.5+ 版本新增了 Admin Server 功能,后续 Web UI 访问依赖该功能,推荐拉取 3.5+ 版本。

3. 验证镜像拉取成功

# 查看本地已拉取的 Zookeeper 镜像
docker images | grep zookeeper

执行后若能看到镜像名称(zookeeper)、对应标签(latest3.8.4)和镜像体积,说明镜像拉取成功。

三、第二步:启动 Zookeeper 单机版容器(核心命令)

执行以下命令一键启动 Zookeeper 单机容器,映射必要端口和数据卷(保证数据持久化和外部可访问):

# 启动 Zookeeper 单机版容器(核心命令)
docker run -d \
  --name zk-single \
  --restart always \
  -p 2181:2181 \
  -p 8080:8080 \
  -v /usr/local/zk/data:/data \
  -v /usr/local/zk/datalog:/datalog \
  -e ZOO_MY_ID=1 \
  zookeeper:latest

命令参数详细说明(理解每个参数的作用)

参数作用说明
-d 后台运行容器(守护进程模式),不占用当前终端窗口
--name zk-single 给容器命名为 zk-single,方便后续停止、重启、进入容器等操作
--restart always 容器异常退出或 Docker 重启时,自动重启 Zookeeper 容器,保证服务稳定性
-p 2181:2181 映射 Zookeeper 核心通信端口(客户端连接依赖,如 HBase、Kafka 连接均用此端口)
-p 8080:8080 映射 Zookeeper Admin Server 端口(3.5+ 版本,用于浏览器访问 Web UI 监控)
-v /usr/local/zk/data:/data 挂载 Zookeeper 数据目录,避免容器删除后数据丢失(持久化存储核心数据)
-v /usr/local/zk/datalog:/datalog 挂载 Zookeeper 日志目录,持久化存储事务日志,便于排查问题
-e ZOO_MY_ID=1 设置环境变量,指定 Zookeeper 节点 ID(单机版直接设为 1 即可,集群版需唯一)
zookeeper:latest 指定使用的镜像名称和标签(与拉取的镜像保持一致,如指定版本则改为 zookeeper:3.8.4

三、第三步:验证 Zookeeper 单机版启动成功

1. 查看容器运行状态

# 查看 Zookeeper 容器是否正常运行(状态为 Up 即成功)
docker ps | grep zk-single
  • 若状态显示 Up X minutes(已运行 X 分钟),说明容器启动成功;
  • 若状态异常(如 Exited),可执行 docker logs zk-single 查看容器日志,定位具体错误(常见错误为目录权限不足、端口被占用)。

2. 访问 Zookeeper Web UI(浏览器验证,3.5+ 版本支持)

打开本地浏览器,输入以下地址,能看到 Zookeeper 节点状态、配置信息即成功:

  • 核心查看项:Mode 显示为 standalone(单机模式),说明部署模式正确;Server State 显示为 running,说明服务正常运行。

3. 进入 Zookeeper 客户端(终端验证操作)

方式 1:进入容器内部使用 zkCli.sh(推荐)

# 1. 进入 Zookeeper 容器内部
docker exec -it zk-single bash

# 2. 启动 Zookeeper 交互式客户端(核心命令)
zkCli.sh

方式 2:直接在本地终端执行客户端命令(无需进入容器)

# 直接通过 Docker 命令启动 Zookeeper 客户端,无需进入容器
docker exec -it zk-single zkCli.sh

客户端常用命令验证(进入客户端后执行)

# 1. 查看 Zookeeper 根节点下的所有子节点(初始为空)
ls /

# 2. 创建一个测试节点(临时节点,退出客户端后自动删除)
create /test "hello-zookeeper"

# 3. 查看创建的节点数据
get /test

# 4. 修改节点数据
set /test "hello-docker-zk"

# 5. 删除测试节点
delete /test
  • 执行以上命令均无报错,且能正常查询、修改数据,说明 Zookeeper 单机版功能正常。

四、常用辅助命令(后续操作必备)

1. 停止 Zookeeper 容器

2. 重启 Zookeeper 容器

3. 删除 Zookeeper 容器(谨慎操作,删除前先停止)

# 1. 先停止容器
docker stop zk-single

# 2. 再删除容器
docker rm zk-single

4. 查看 Zookeeper 容器日志(排查错误)

# 实时查看日志(按 Ctrl+C 退出实时监控)
docker logs -f zk-single

# 查看最近 200 行日志(适合快速定位近期错误)
docker logs --tail 200 zk-single

五、常见问题排查

  1. 端口 2181 被占用:
  • 错误日志提示 Address already in use,说明 2181 端口被其他进程占用;
  • 解决方案:修改端口映射,如 -p 2182:2181,后续客户端连接使用 2182 端口。
  1. 数据目录权限不足:
  • 错误日志提示 Permission denied,说明本地挂载目录无读写权限;
  • 解决方案:给本地目录赋予读写权限,chmod -R 777 /usr/local/zk
  1. Web UI 无法访问(8080 端口):
  • 确认 Zookeeper 版本为 3.5+(3.4 及以下版本无 Admin Server,不支持 Web UI);
  • 确认端口映射正确,无其他进程占用 8080 端口。

六、总结

  1. 镜像来源:首选 Docker Hub 官方镜像 zookeeper,通过 docker pull zookeeper:latest(或指定版本)拉取;
  2. 核心启动命令:docker run 配合端口映射、数据卷挂载、环境变量配置,实现 Zookeeper 单机版一键启动;
  3. 验证方式:通过 docker ps 查看容器状态、浏览器访问 Web UI、zkCli.sh 客户端操作,三重验证确保服务正常;
  4. 关键注意:数据卷挂载保证数据持久化,--restart always 提升服务稳定性,2181 端口是客户端连接的核心端口。 

按照以上步骤,即可快速通过 Docker 搭建 Zookeeper 单机版环境,无需复杂配置,适合开发测试和快速上手 Zookeeper 基本操作。