version: '3.8' services: # ETCD 分布式键值存储 etcd: image: quay.io/coreos/etcd:v3.5.4 container_name: etcd ports: - "2379:2379" # 客户端连接端口 - "2380:2380" # 节点通信端口 environment: ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379" ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380" ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd:2380" ETCD_NAME: "etcd-single" ETCD_INITIAL_CLUSTER: "etcd-single=http://etcd:2380" ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster" ETCD_INITIAL_CLUSTER_STATE: "new" volumes: - etcd-data:/etcd-data networks: - app-network # Redis 缓存数据库 redis: image: redis:7.0-alpine container_name: redis ports: - "6379:6379" volumes: - redis-data:/data networks: - app-network command: redis-server --save 60 1 --loglevel warning # MySQL 数据库 mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: rootpassword # 请更改为强密码 MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: userpassword # 请更改为强密码 ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d # 初始化SQL脚本目录 networks: - app-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 10s retries: 5 # ETCD 可视化界面 (Web UI) etcd-viewer: image: deltaprojects/etcdkeeper:latest container_name: etcd-viewer ports: - "8080:8080" environment: ETCD_HOST: etcd ETCD_PORT: 2379 networks: - app-network depends_on: - etcd # 数据卷声明 volumes: etcd-data: redis-data: mysql-data: # 网络配置 networks: app-network: driver: bridge