version: "3.9" services: # MySQL 数据库服务 mysql: image: mysql:8.0 container_name: student-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: "123456" MYSQL_DATABASE: "student_system" MYSQL_CHARSET: "utf8mb4" MYSQL_COLLATION: "utf8mb4_unicode_ci" TZ: "Asia/Shanghai" ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d - ./mysql/init:/docker-entrypoint-initdb.d command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --default-authentication-plugin=mysql_native_password networks: - student-net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"] interval: 10s timeout: 5s retries: 10 # FastAPI 应用服务 api: build: context: . dockerfile: Dockerfile container_name: student-api restart: unless-stopped depends_on: mysql: condition: service_healthy environment: DB_HOST: "mysql" DB_PORT: "3306" DB_NAME: "student_system" DB_USER: "root" DB_PASSWORD: "123456" TZ: "Asia/Shanghai" ports: - "9090:9090" volumes: - .:/app - ./files:/app/files networks: - student-net # 数据卷(持久化 MySQL 数据) volumes: mysql_data: driver: local # 自定义网络(服务间通信) networks: student-net: driver: bridge