数据库测试实验室
为 DBX 开发与验证启动可重复创建的本地数据库实例。
数据库测试实验室提供轻量、固定版本的 Docker Compose 环境,方便使用真实数据库版本验证 DBX。每个配方都使用命名数据卷、健康检查、初始化数据或验证阶段创建的冒烟数据,并且默认监听 127.0.0.1。
123456,但端口默认只能从本机访问。如需远程访问,请显式设置 DB_BIND_ADDRESS=0.0.0.0、修改 DB_PASSWORD,并配置常规防火墙规则。这些环境用于开发,不是生产部署模板。可用配方
| 数据库 | 版本目录 | Docker Hub 官方镜像 | Compose 使用的 CNB 镜像 | 默认宿主端口 | 容器名 |
|---|---|---|---|---|---|
| ClickHouse | clickhouse/24.8 | clickhouse/clickhouse-server:24.8.14.39 | docker.cnb.cool/znb/images/clickhouse-server:24.8.14.39 | 8124 | dbx-clickhouse-24.8 |
| MariaDB | mariadb/10.11 | mariadb:10.11.11 | docker.cnb.cool/znb/images/mariadb:10.11.11 | 3307 | dbx-mariadb-10.11 |
| MongoDB | mongodb/5.0 | mongo:5.0.5 | docker.cnb.cool/znb/images/mongo:5.0.5 | 27018 | dbx-mongodb-5.0 |
| MongoDB | mongodb/8.2 | mongo:8.2.3-noble | docker.cnb.cool/znb/images/mongo:8.2.3-noble | 27018 | dbx-mongodb-8.2 |
| MySQL | mysql/5.7 | mysql:5.7.44 | docker.cnb.cool/znb/images/mysql:5.7.44 | 3307 | dbx-mysql-5.7 |
| MySQL | mysql/8.4 | mysql:8.4.6 | docker.cnb.cool/znb/images/mysql:8.4.6 | 3307 | dbx-mysql-8.4 |
| PostgreSQL | postgresql/14.23 | postgres:14.23 | docker.cnb.cool/znb/images/postgres:14.23 | 5433 | dbx-postgresql-14.23 |
| PostgreSQL | postgresql/17.4 | postgres:17.4 | docker.cnb.cool/znb/images/postgres:17.4 | 5433 | dbx-postgresql-17.4 |
| Redis | redis/3.0.7 | redis:3.0.7-alpine | docker.cnb.cool/znb/images/redis:3.0.7-alpine | 6380 | dbx-redis-3.0.7 |
| Redis | redis/7.4 | redis:7.4.9-alpine | docker.cnb.cool/znb/images/redis:7.4.9-alpine | 6380 | dbx-redis-7.4 |
所有网络数据库的默认宿主端口都比标准端口大 1,并且该约定由配方校验器强制检查。默认密码统一为 123456,默认数据库名为 dbx。Redis 不支持命名数据库,因此使用 DB 0,并以 dbx: 作为冒烟键前缀。Compose 默认使用 CNB 镜像列;Docker Hub 列保留官方上游地址,便于核对来源或直接拉取。Redis 3.0.7 仅支持 amd64;在 arm64 主机上启动时会单独提醒,Docker 将使用模拟运行。其余配方均支持 amd64 和 arm64。
Redis 3.0.7 和 Redis 7.4.9 用于覆盖兼容性的两个端点。Redis 3 早于 ACL、RESP3、Streams 及许多现代命令,Redis 7 则覆盖当前协议与命令集。对这个实验室而言,同时保留 6.2 和 7.4 所提供的兼容性覆盖更小。
同一数据库的不同版本默认会共用宿主机端口。通常一次启动一个版本;需要并行对比时,为其中一个版本指定其他端口:
DB_PORT=13307 make db DB=mysql@5.7
make db DB=mysql@8.4启动并验证环境
在仓库根目录执行。先列出可用配方,再选择数据库和版本:
make db
make db-list
make db DB=postgresql@17.4
make db-verify DB=postgresql@17.4不带参数执行 make db 会输出当前全部支持的、可直接复制启动的命令,以及可选参数。传入 DB=product@version 后,db 会等待 Compose 健康检查通过并输出 DBX 连接字段。db-verify 还会在数据库容器中执行配方中的冒烟命令,并校验预期输出;提交数据库相关修复前推荐执行此命令。
命令和变量
| Make 目标 | 用途 |
|---|---|
make db-list | 列出数据库版本、镜像和支持的平台 |
make db DB=product@version | 创建、等待环境就绪并输出连接字段 |
make db-verify DB=product@version | 启动并运行冒烟检查 |
make db-down DB=product@version | 停止环境但保留数据卷 |
make db-reset DB=product@version CONFIRM=1 | 删除环境及数据卷 |
make db-check | 校验全部配方和 Compose 文件 |
DB_BIND_ADDRESS 修改主机侧绑定地址,DB_PORT 修改主机侧端口,DB_PASSWORD 修改默认密码。例如:
DB_PORT=13306 DB_PASSWORD=local-secret make db-verify DB=mysql@8.4远程访问必须显式启用:
DB_BIND_ADDRESS=0.0.0.0 DB_PASSWORD=local-secret make db DB=mysql@8.4db-reset 受安全保护:只有设置 CONFIRM=1 才会删除命名卷。Redis 不支持镜像初始化目录约定;其 init/README.md 说明了 verify 会创建并读取的冒烟键。需要诊断时,可直接运行 pnpm db:env -- info|status|logs|shell <product> <version>。
Tab 补全
仓库提供 Make 目标和 DB=product@version 值的动态补全。它会读取当前配方目录,因此新增版本后无需修改补全脚本。
# Bash
source deploy/database/completion/dbx-make.bash
# Zsh
autoload -Uz compinit && compinit
source deploy/database/completion/_dbx-make.zsh
# PowerShell
. .\deploy\database\completion\Dbx.Make.ps1运行 make db-completion 可打印上述命令。加载对应脚本后,在 make db DB= 后按 Tab 即可选择配方。Make 目标本身已避免依赖 POSIX Shell 条件语法,因此在 PowerShell、Git Bash 或 WSL 中使用 GNU Make 均可运行;仍需安装 Docker Desktop 和 Node.js/pnpm。
添加配方
在 deploy/database/<product>/<version>/ 下添加目录,并提供:
recipe.json
compose.yaml
init/recipe.json 提供 DBX 连接字段和冒烟命令数组。不要使用 shell 字符串,命令必须作为参数数组执行。Compose 文件必须固定镜像版本、使用命名卷和健康检查、将端口默认绑定至 ${DB_BIND_ADDRESS:-127.0.0.1},并把 container_name 设置为 dbx-<product>-<version>。
完成后运行:
pnpm test:db-env
make db-check