services:
etcd:
container_name: "danube-etcd"
image: quay.io/coreos/etcd:v3.5.9
environment:
- ETCDCTL_API=3
- ETCD_NAME=danube-etcd
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_INITIAL_CLUSTER=danube-etcd=http://etcd:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd:2380
- ETCD_INITIAL_CLUSTER_STATE=new
- ETCD_INITIAL_CLUSTER_TOKEN=danube-cluster
ports:
- "2379:2379"
- "2380:2380"
networks:
- danube_net
volumes:
- etcd_data:/etcd-data
healthcheck:
test:
[
"CMD",
"etcdctl",
"--endpoints=http://127.0.0.1:2379",
"endpoint",
"health",
]
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
minio:
container_name: "danube-minio"
image: minio/minio:RELEASE.2025-07-23T15-54-02Z
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin123
- MINIO_DOMAIN=minio
ports:
- "9000:9000" - "9001:9001" command: ["server", "/data", "--console-address", ":9001"]
networks:
- danube_net
volumes:
- minio_data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://minio:9000/minio/health/live"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
mc:
container_name: "danube-mc"
image: minio/mc:RELEASE.2024-09-16T17-43-14Z
depends_on:
minio:
condition: service_healthy
networks:
- danube_net
entrypoint: >
/bin/sh -c "
echo 'Waiting for MinIO to be ready...';
until (/usr/bin/mc alias set danube-minio http://minio:9000 minioadmin minioadmin123) do
echo 'MinIO not ready, waiting...' && sleep 2;
done;
echo 'Creating Danube buckets...';
/usr/bin/mc rm -r --force danube-minio/danube-messages || true;
/usr/bin/mc rm -r --force danube-minio/danube-wal || true;
/usr/bin/mc mb danube-minio/danube-messages;
/usr/bin/mc mb danube-minio/danube-wal;
echo 'Buckets created successfully';
echo 'MinIO setup complete - keeping container alive';
tail -f /dev/null
"
broker1:
container_name: "danube-broker1"
image: ghcr.io/danube-messaging/danube-broker:latest
depends_on:
etcd:
condition: service_healthy
minio:
condition: service_healthy
mc:
condition: service_started
environment:
- RUST_LOG=danube_broker=info,danube_core=info,danube_persistent_storage=info
- AWS_ACCESS_KEY_ID=minioadmin
- AWS_SECRET_ACCESS_KEY=minioadmin123
- AWS_REGION=us-east-1
volumes:
- ./danube_broker.yml:/etc/danube_broker.yml:ro
- broker1_wal:/data/wal
networks:
- danube_net
ports:
- "6650:6650" - "50051:50051" - "9040:9040" command:
[
"--config-file",
"/etc/danube_broker.yml",
"--broker-addr",
"0.0.0.0:6650",
"--admin-addr",
"0.0.0.0:50051",
"--prom-exporter",
"0.0.0.0:9040",
"--advertised-addr",
"broker1:6650",
]
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9040/metrics || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
danube_net:
driver: bridge
volumes:
etcd_data:
minio_data:
broker1_wal: