version: '3.8' services: # 应用服务 app: build: . container_name: tianfeng-task restart: always ports: - "8000:8000" environment: - TIANFENG_ENV=default - DEBUG=false - DB_HOST=db - DB_PORT=3306 - DB_USER=root - DB_PASSWORD=password - DB_NAME=tianfeng_task - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_DB=0 depends_on: db: condition: service_healthy redis: condition: service_healthy volumes: - ./logs:/app/logs networks: - tianfeng-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # MySQL数据库服务 db: image: mysql:8.0 container_name: tianfeng-mysql restart: always environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=tianfeng_task - MYSQL_USER=tianfeng - MYSQL_PASSWORD=tianfeng ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - tianfeng-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] interval: 10s timeout: 5s retries: 5 start_period: 30s # Redis缓存服务 redis: image: redis:6.2-alpine container_name: tianfeng-redis restart: always ports: - "6379:6379" volumes: - redis-data:/data command: redis-server --appendonly yes networks: - tianfeng-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 10s volumes: mysql-data: redis-data: networks: tianfeng-network: driver: bridge