services: zookeeper: image: registry.cn-chengdu.aliyuncs.com/reghao/zookeeper:3.8.4 restart: always container_name: zookeeper hostname: node211 ports: - "2181:2181" - "2888:2888" # 🚨 集群必须暴露:原子广播端口 - "3888:3888" # 🚨 集群必须暴露:Leader选举端口 volumes: - /opt/docker/zookeeper/data:/data - /opt/docker/zookeeper/datalog:/datalog - /opt/docker/zookeeper/logs:/logs environment: ZOO_MY_ID: 1 # 🚨 机器1固定为 1 # 🚨 核心:用双引号包裹的全局集群视图(三台机器此项完全一致) ZOO_SERVERS: "server.1=192.168.0.211:2888:3888;2181,server.2=192.168.0.212:2888:3888;2181,server.3=192.168.0.213:2888:3888;2181" ZOO_AUTOPURGE_PURGEINTERVAL: 24 ZOO_AUTOPURGE_SNAPRETAINCOUNT: 5 ZOO_LOG4J_PROP: "INFO, ROLLINGFILE" ZOO_LOG_MAXFILESIZE: "100MB" ZOO_LOG_MAXBACKUPINDEX: 10 JVMFLAGS: "-Xms512m -Xmx512m" ZOO_MAX_CLIENT_CNXNS: 60 deploy: resources: limits: cpus: '1.0' memory: 1G reservations: cpus: '0.5' memory: 512M logging: driver: "json-file" options: max-size: "100m" max-file: "3" healthcheck: test: ["CMD", "zkServer.sh", "status"] interval: 15s # 🚨 适当延长检查间隔,给集群选举留出时间 timeout: 5s retries: 5 # 🚨 增加重试次数,防止因同伴未拉起被 Docker 误杀 start_period: 20s # 🚨 给 20 秒宽限期