# 这是完整端口映射的示例配置 # 用于开发环境或需要直接访问后端/数据库的场景 services: mysql: image: mysql:8.0 container_name: demo-mysql environment: - MYSQL_ROOT_PASSWORD=177615 - MYSQL_DATABASE=aigc_platform - MYSQL_USER=demo - MYSQL_PASSWORD=demo_pass ports: - "3306:3306" # 如果需要外部工具连接数据库 command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 networks: - app-network backend: build: context: . dockerfile: Dockerfile.backend container_name: demo-backend environment: - SPRING_PROFILES_ACTIVE=prod - DB_URL=jdbc:mysql://mysql:3306/aigc_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - DB_USERNAME=demo - DB_PASSWORD=demo_pass depends_on: mysql: condition: service_healthy ports: - "8080:8080" # 如果需要直接访问后端 API volumes: - uploads_data:/app/uploads networks: - app-network healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 60s nginx: build: context: ./nginx dockerfile: Dockerfile container_name: demo-nginx ports: - "80:80" # ✅ 内网穿透只需要这个端口 volumes: - ./frontend/dist:/usr/share/nginx/html:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - backend networks: - app-network restart: unless-stopped volumes: mysql_data: uploads_data: networks: app-network: driver: bridge