services: mysql: image: mysql:8.0 container_name: walin-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: walin_db TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql # 容器首次启动时自动执行建表 + 种子数据脚本 - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-proot123456"] interval: 5s timeout: 3s retries: 20 networks: - walin-net api: build: . container_name: walin-api restart: unless-stopped environment: # 注意:api 容器内通过服务名 mysql 访问数据库 DATABASE_URL: mysql+pymysql://root:root123456@mysql:3306/walin_db?charset=utf8mb4 SECRET_KEY: change_me_to_a_long_random_string_in_production DB_ECHO: "false" DEBUG: "false" depends_on: mysql: condition: service_healthy networks: - walin-net nginx: image: nginx:1.25-alpine container_name: walin-nginx restart: unless-stopped ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - api networks: - walin-net volumes: mysql_data: networks: walin-net: driver: bridge