DBXDBX

数据库测试实验室

为 DBX 开发与验证启动可重复创建的本地数据库实例。

数据库测试实验室提供轻量、固定版本的 Docker Compose 环境,方便使用真实数据库版本验证 DBX。每个配方都使用命名数据卷、健康检查、初始化数据或验证阶段创建的冒烟数据,并且默认监听 127.0.0.1

默认密码为 123456,但端口默认只能从本机访问。如需远程访问,请显式设置 DB_BIND_ADDRESS=0.0.0.0、修改 DB_PASSWORD,并配置常规防火墙规则。这些环境用于开发,不是生产部署模板。

可用配方

数据库版本目录Docker Hub 官方镜像Compose 使用的 CNB 镜像默认宿主端口容器名
ClickHouseclickhouse/24.8clickhouse/clickhouse-server:24.8.14.39docker.cnb.cool/znb/images/clickhouse-server:24.8.14.398124dbx-clickhouse-24.8
MariaDBmariadb/10.11mariadb:10.11.11docker.cnb.cool/znb/images/mariadb:10.11.113307dbx-mariadb-10.11
MongoDBmongodb/5.0mongo:5.0.5docker.cnb.cool/znb/images/mongo:5.0.527018dbx-mongodb-5.0
MongoDBmongodb/8.2mongo:8.2.3-nobledocker.cnb.cool/znb/images/mongo:8.2.3-noble27018dbx-mongodb-8.2
MySQLmysql/5.7mysql:5.7.44docker.cnb.cool/znb/images/mysql:5.7.443307dbx-mysql-5.7
MySQLmysql/8.4mysql:8.4.6docker.cnb.cool/znb/images/mysql:8.4.63307dbx-mysql-8.4
PostgreSQLpostgresql/14.23postgres:14.23docker.cnb.cool/znb/images/postgres:14.235433dbx-postgresql-14.23
PostgreSQLpostgresql/17.4postgres:17.4docker.cnb.cool/znb/images/postgres:17.45433dbx-postgresql-17.4
Redisredis/3.0.7redis:3.0.7-alpinedocker.cnb.cool/znb/images/redis:3.0.7-alpine6380dbx-redis-3.0.7
Redisredis/7.4redis:7.4.9-alpinedocker.cnb.cool/znb/images/redis:7.4.9-alpine6380dbx-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.4

db-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

本页目录