# ⚠️ 不再需要 version 字段
# 给zk集群配置一个网络,网络名为zk-net
networks:
zookeeper-net:
name: zookeeper-net
services:
zookeeper-cluster-1:
image: zookeeper:3.6.3
restart: always
container_name: zookeeper-cluster-1
ports:
- "2181:2181"
- "8081:8080"
environment:
# 当前zk实例的id
ZOO_MY_ID: 1
ZOO_TICK_TIME: 20000
ZOO_ADMIN_SERVER_ENABLED: "true" # ✅ 启用 Web 管理页面
# 整个zk集群的机器、端口列表
ZOO_SERVERS: server.1=zookeeper-cluster-1:2888:3888;2181 server.2=zookeeper-cluster-2:2888:3888;2181 server.3=zookeeper-cluster-3:2888:3888;2181
ZOO_4LW_COMMANDS_WHITELIST: ruok,stat,srvr,conf
# ZOO_4LW_COMMANDS_WHITELIST: * # 允许所有命令
volumes:
- ./data/zk1/data:/data # 数据文件(快照)
- ./data/zk1/datalog:/datalog # 事务日志
- ./data/zk1/logs:/logs # 中的日志输出可能需要你配置 ZooKeeper 的日志级别或路径;
- ./data/zk1/conf:/conf:ro # 挂载配置目录为只读,是容器内只读的,若只想查看配置,可以用只读挂载;
# 拷贝 zookeeper-cluster-1 中的配置目录到宿主机 docker cp zookeeper-cluster-1:/conf ./data/zk1/conf
# /data/zk1/data/myid 容器内部 myid 值
# 当前docker container加入名为zk-net的隔离网络
networks:
- zookeeper-net
healthcheck:
test: [ "CMD", "bash", "-c", "echo ruok | nc localhost 2181 | grep imok" ]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
zookeeper-cluster-2:
image: zookeeper:3.6.3
restart: always
container_name: zookeeper-cluster-2
ports:
- "2182:2181"
- "8082:8080"
environment:
ZOO_MY_ID: 2
ZOO_TICK_TIME: 20000
ZOO_ADMIN_SERVER_ENABLED: "true" # ✅ 启用 Web 管理页面
ZOO_SERVERS: server.1=zookeeper-cluster-1:2888:3888;2181 server.2=zookeeper-cluster-2:2888:3888;2181 server.3=zookeeper-cluster-3:2888:3888;2181
ZOO_4LW_COMMANDS_WHITELIST: ruok,stat,srvr,conf
volumes:
- ./data/zk2/data:/data
- ./data/zk2/datalog:/datalog
- ./data/zk1/logs:/logs
- ./data/zk1/conf:/conf:ro
networks:
- zookeeper-net
healthcheck:
test: [ "CMD", "bash", "-c", "echo ruok | nc localhost 2181 | grep imok" ]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
zookeeper-cluster-3:
image: zookeeper:3.6.3
restart: always
container_name: zookeeper-cluster-3
ports:
- "2183:2181"
- "8083:8080"
environment:
ZOO_MY_ID: 3
ZOO_TICK_TIME: 20000
ZOO_ADMIN_SERVER_ENABLED: "true" # ✅ 启用 Web 管理页面
ZOO_SERVERS: server.1=zookeeper-cluster-1:2888:3888;2181 server.2=zookeeper-cluster-2:2888:3888;2181 server.3=zookeeper-cluster-3:2888:3888;2181
ZOO_4LW_COMMANDS_WHITELIST: ruok,stat,srvr,conf
volumes:
- ./data/zk3/data:/data
- ./data/zk3/datalog:/datalog
- ./data/zk1/logs:/logs
- ./data/zk1/conf:/conf:ro
networks:
- zookeeper-net
healthcheck:
test: [ "CMD", "bash", "-c", "echo ruok | nc localhost 2181 | grep imok" ]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
#### webui
# zk-ui:
# image: qnib/plain-zkui:latest
# container_name: zk-ui
# restart: unless-stopped
# ports:
# - "8821:9090"
# environment:
# ZK_SERVER: zookeeper-cluster-1:2181,zookeeper-cluster-2:2181,zookeeper-cluster-3:2181
# ZKUI_ADMIN_USER: admin
# ZKUI_ADMIN_PWD: admin
# ZKUI_PORT: 9090
# depends_on:
# - zookeeper-cluster-1
# - zookeeper-cluster-2
# - zookeeper-cluster-3
# networks:
# - zookeeper-net
# zookeeper-cluster-docker-compose
```shell
docker cp zookeeper-cluster-1:/conf ./data/zk1
```
```shell
docker cp zookeeper-cluster-1:/conf ./data/zk2
```
```shell
docker cp zookeeper-cluster-1:/conf ./data/zk3
```
```shell
## 后台启动容器
docker-compose -f docker-compose.yml --compatibility up -d
```
```shell
### 停止容器
docker-compose -f docker-compose.yml --compatibility stop
```
```shell
### 停止容器并删除容器
docker-compose -f docker-compose.yml --compatibility down
```
```常用命令支持
http://localhost:8081/commands
http://localhost:8082/commands
http://localhost:8083/commands
```
评论区