docker-compose.yml 1.06 KB
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: