version: '3.8' services: app: build: context: . args: - DB_HOST=db - DB_PORT=3306 - DB_USER=ai_user - DB_PASSWORD=yourpassword - DB_NAME=ai_dressing container_name: ai-dressing-app restart: always ports: - "9001:8000" env_file: - ./.env # 环境变量可以覆盖.env文件中的值 environment: - DB_HOST=db - DB_PORT=3306 - DB_USER=ai_user - DB_PASSWORD=yourpassword - DB_NAME=ai_dressing # 这些环境变量会从宿主机的环境变量中读取,如果不存在则使用示例值 - DASHSCOPE_API_KEY=${DASHSCOPE_API_KEY:-your_dashscope_api_key} - QCLOUD_SECRET_ID=${QCLOUD_SECRET_ID:-your_qcloud_secret_id} - QCLOUD_SECRET_KEY=${QCLOUD_SECRET_KEY:-your_qcloud_secret_key} - QCLOUD_COS_REGION=${QCLOUD_COS_REGION:-ap-chengdu} - QCLOUD_COS_BUCKET=${QCLOUD_COS_BUCKET:-your-bucket-name} - QCLOUD_COS_DOMAIN=${QCLOUD_COS_DOMAIN:-https://your-bucket-domain.com} - PYTHONPATH=/app depends_on: - db volumes: - ./.env:/app/.env:ro # 明确映射.env文件 # - ./app:/app/app # 开发时才使用,生产环境建议去掉 networks: - ai-dressing-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s db: image: mysql:8.0 container_name: ai-dressing-db restart: always ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_USER=ai_user - MYSQL_PASSWORD=yourpassword - MYSQL_DATABASE=ai_dressing volumes: - mysql-data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - ai-dressing-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] interval: 30s timeout: 10s retries: 3 start_period: 30s volumes: mysql-data: networks: ai-dressing-network: driver: bridge