services: mysql: image: mysql:8.4 ports: - "${MYSQL_PORT:-3306}:3306" # 口令没有默认值:容器口令必须和代码里连库用的口令是同一个来源,否则起来的库谁也连不上。 # 唯一入口是 `pnpm mysql:up`(tools/scripts/mysql-dev.js),它从 @drama/db 的 devMysqlUrl() # 解析出口令注进来。直接 `docker compose up mysql` 会明确报缺变量,而不是悄悄起一个错口令的库。 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?run `pnpm mysql:up` instead of `docker compose up mysql`} MYSQL_DATABASE: ${MYSQL_DATABASE:?run `pnpm mysql:up` instead of `docker compose up mysql`} command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: - mysql-data:/var/lib/mysql - ./docker/mysql/init:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"] interval: 5s timeout: 3s retries: 30 volumes: mysql-data: