# ============================================ # 沃林学生管理系统 - Docker 编排 # MySQL 8.0 虚拟镜像 + Backend (FastAPI) # ============================================ version: "3.9" services: # ---------- MySQL 虚拟镜像 ---------- mysql: image: mysql:8.0 container_name: wolin-sms-mysql restart: unless-stopped environment: # 与 database.py 中的默认凭证保持一致 MYSQL_ROOT_PASSWORD: "123456" MYSQL_DATABASE: student_manager TZ: Asia/Shanghai command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --default-authentication-plugin=mysql_native_password ports: # 宿主机 3307 -> 容器 3306 # (用 3307 是为了避免与本机已安装的 MySQL 冲突) - "3308:3306" volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-p123456"] interval: 10s timeout: 5s retries: 10 start_period: 30s networks: - wolin-net # ---------- 后端应用 ---------- backend: build: context: . dockerfile: Dockerfile container_name: wolin-sms-backend restart: unless-stopped depends_on: mysql: condition: service_healthy environment: # 容器内通过服务名 mysql 访问数据库(Docker 内置 DNS) MYSQL_HOST: mysql MYSQL_PORT: "3306" MYSQL_USER: root MYSQL_PASSWORD: "123456" MYSQL_DB: student_manager TZ: Asia/Shanghai ports: - "8001:8001" networks: - wolin-net networks: wolin-net: driver: bridge volumes: mysql_data: driver: local