参考:https://blog.csdn.net/duyun0/article/details/128437451

1
2
3
4
5
6
7
docker pull zookeeper:3.7.0

mkdir -p /myapp/zookeeperdocker/data # 数据挂载目录
mkdir -p /myapp/zookeeperdocker/conf # 配置挂载目录
mkdir -p /myapp/zookeeperdocker/logs # 日志挂载目录

docker run -d --name zk3.7.0 --privileged=true -p 2181:2181 -v /myapp/zookeeperdocker/data:/data -v /myapp/zookeeperdocker/conf:/conf -v /myapp/zookeeperdocker/logs:/datalog zookeeper:3.7.0

容器没启动,查看日志

1
docker logs zk3.7.0

报错:/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied,给以下文件夹授予权限即可

1
2
3
chmod 777 /myapp/zookeeperdocker/data
chmod 777 /myapp/zookeeperdocker/conf
chmod 777 /myapp/zookeeperdocker/logs

重新启动容器 zk3.7.0

1
docker restart zk3.7.0

启动成功

image-20231026204751184

使用PrettyZoo连接

image-20231026205044717

挂载文件夹下已生成了一些文件

image-20231026204918067

zoo.cfg的初始内容

1
2
3
4
5
6
7
8
9
10
11
dataDir=/data	# 数据存储的目录,是容器内的路径,而不是主机的路径
dataLogDir=/datalog # 事务日志的存储目录,这个路径不是centos本机的路径,而是相对于ZooKeeper容器内部的路径
tickTime=2000 # 通信心跳时间
initLimit=5 # LF(leader - follower)初始通信时限
syncLimit=2 # LF同步通信时限
autopurge.snapRetainCount=3 # ZooKeeper 自动快照保留的数量
autopurge.purgeInterval=0 # 自动快照清理的时间间隔,以小时为单位,设置为 0 表示禁用自动快照清理
maxClientCnxns=60 # 每个客户端与 ZooKeeper 服务器之间的最大并发连接数
standaloneEnabled=true # 是否启用 ZooKeeper 服务器的独立模式
admin.enableServer=true # 否启用服务器管理员
server.1=localhost:2888:3888;2181 # server.1 表示服务器的标识符,localhost:2888:3888 表示服务器的主机名和端口号(用于通信和选举),2181是该服务器用于客户端访问的端口号

dataDirdataLogDir 的路径是相对于 ZooKeeper 容器内部的路径。这些路径指定了容器内 ZooKeeper 服务器的数据和日志存储位置。

/data/datalog 路径是相对于 ZooKeeper 容器内的根路径的,而不是 CentOS 主机的路径。这意味着容器内的 ZooKeeper 服务器将在容器内的根目录下创建名为 /data/datalog 的目录来存储数据和事务日志。

进入容器内部

1
docker exec -it zk3.7.0 /bin/bash

image-20231026211802831

退出容器

1
exit

image-20231026211956406