services: rabbitmq: image: rabbitmq:3.13-alpine ports: - "5672:5672" security_opt: - no-new-privileges:true kafka: image: confluentinc/cp-kafka:8.0.0 ports: - "9092:9092" environment: KAFKA_NODE_ID: "1" KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://127.0.0.1:9092" KAFKA_PROCESS_ROLES: "broker,controller" KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_BROKER_ID: "1" KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093" KAFKA_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093" KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER" CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk" security_opt: - no-new-privileges:true nats: image: nats command: -js ports: - 4222:4222 - 8222:8222 # management security_opt: - no-new-privileges:true redis: image: redis:8-alpine ports: - 6379:6379 security_opt: - no-new-privileges:true redis-cluster: image: redis:8-alpine network_mode: host healthcheck: test: redis-cli -p 7001 ping || exit 1 interval: 2s timeout: 3s retries: 40 start_period: 5s command: - sh - -c - | redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes-1.conf --cluster-node-timeout 5000 --appendonly no --save '' & redis-server --port 7002 --cluster-enabled yes --cluster-config-file nodes-2.conf --cluster-node-timeout 5000 --appendonly no --save '' & redis-server --port 7003 --cluster-enabled yes --cluster-config-file nodes-3.conf --cluster-node-timeout 5000 --appendonly no --save '' & for p in 7001 7002 7003; do echo "waiting for port $$p ..." until redis-cli -p $$p ping 2>/dev/null; do sleep 0.5; done done && i=0 while [ $$i -lt 10 ]; do echo "Creating cluster (attempt $$((i+1)))..." echo yes | redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 --cluster-replicas 0 && break i=$$((i+1)) sleep 1 done && echo 'Redis Cluster ready' && tail -f /dev/null artemis: image: apache/activemq-artemis:latest-alpine environment: ANONYMOUS_LOGIN: "true" ports: - "1883:1883" security_opt: - no-new-privileges:true