version: '3.8' services: # MySQL 数据库服务 mysql: image: mysql:8.0 container_name: license-admin-mysql environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-password} MYSQL_DATABASE: ${DB_NAME:-license_admin} MYSQL_USER: ${DB_USER:-license_user} MYSQL_PASSWORD: ${DB_PASSWORD:-password} ports: - "${DB_PORT:-3306}:3306" volumes: # 持久化 MySQL 数据 - mysql_data:/var/lib/mysql # 初始化 SQL 脚本 - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro restart: unless-stopped command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] interval: 10s timeout: 5s retries: 5 networks: - license-admin-network # License Admin 应用服务 license-admin: build: context: . dockerfile: Dockerfile platforms: - linux/amd64 image: license-admin:latest container_name: license-admin ports: - "8080:8080" environment: # 认证 Token,生产环境请修改 - AUTH_TOKEN=${AUTH_TOKEN:-admin-token-123456} # 端口配置 - PORT=8080 # MySQL 数据库配置 - DB_HOST=mysql - DB_PORT=3306 - DB_USER=${DB_USER:-root} - DB_PASSWORD=${DB_PASSWORD:-password} - DB_NAME=${DB_NAME:-license_admin} depends_on: mysql: condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"] interval: 30s timeout: 3s retries: 3 start_period: 10s networks: - license-admin-network volumes: mysql_data: driver: local networks: license-admin-network: driver: bridge