Skip to content

Instantly share code, notes, and snippets.

@hkwi
Last active January 3, 2026 02:21
Show Gist options
  • Select an option

  • Save hkwi/72d98bc90258244612678870a9f4390c to your computer and use it in GitHub Desktop.

Select an option

Save hkwi/72d98bc90258244612678870a9f4390c to your computer and use it in GitHub Desktop.
zookeeper の起動と起動確認 docker compose

ZooKeeper 3-node Cluster (Docker Compose)

This sets up a 3-node ZooKeeper cluster using the official Docker Hub zookeeper:3.8.4 image.

Quick Start

cd /home/kawai/iceberg-poc/iced
docker compose up -d
  • Node ports: zookeeper1 exposes client port 2181 on the host. Other nodes are accessible internally on the network.
  • Cluster peer ports: 2888 and 3888 are used internally for quorum and leader election.

Check Status

# View logs
docker compose logs -f zookeeper1

# Check ensemble from inside a container
docker compose ps
# Pick the actual container name for zookeeper1 and run:
# docker exec -it <container_name> zkCli.sh -server zookeeper1:2181
# In the shell, try:
# stat /   or   ls /
 
# Automated check container (optional)
# Starts a helper that retries zkCli until ZooKeeper is ready
docker compose up -d zk-checker
docker compose logs -f zk-checker

Stop and Clean Up

docker compose down

Notes

  • Each node has a unique ZOO_MY_ID and the same ZOO_SERVERS list.
  • Authentication is disabled (ALLOW_ANONYMOUS_LOGIN=yes) for simplicity. Enable auth if needed.
version: "3.8"
services:
zookeeper1:
image: zookeeper:3.8.4
container_name: zookeeper1
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
- ZOO_STANDALONE_ENABLED=false
ports:
- "2181:2181"
networks:
- zk-net
zookeeper2:
image: zookeeper:3.8.4
container_name: zookeeper2
environment:
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
- ZOO_STANDALONE_ENABLED=false
networks:
- zk-net
zookeeper3:
image: zookeeper:3.8.4
container_name: zookeeper3
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
- ZOO_STANDALONE_ENABLED=false
networks:
- zk-net
zk-checker:
image: zookeeper:3.8.4
container_name: zk-checker
depends_on:
- zookeeper1
- zookeeper2
- zookeeper3
networks:
- zk-net
entrypoint: ["bash", "-c"]
# Try connecting to zookeeper1:2181 until success, then exit
command:
- |
for i in $(seq 1 60); do
echo 'Checking ZooKeeper...'
zkCli.sh -server zookeeper1:2181 stat / && exit 0 || sleep 2
done
echo 'ZooKeeper not ready after retries'
exit 1
networks:
zk-net:
driver: bridge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment