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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 郭慕荣

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 节点状态、配置信息即成功:

http://localhost:8080
  • 核心查看项: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 容器

docker stop zk-single

2. 重启 Zookeeper 容器

docker restart zk-single

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 基本操作。