
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Gnomock是一个集成和端到端测试工具包。它使用Docker创建临时容器来模拟应用依赖,设置它们的初始状态,并在测试结束时自动清理。Gnomock允许在可能的情况下使用真实服务而非mock进行代码测试。
Gnomock的优势在于其丰富的预设(Presets),每个预设针对特定的数据库、服务或工具,提供简单的初始状态设置方式:如创建SQL模式、上传测试数据到S3、向Splunk发送测试事件等。
名称“Gnomock”代表“no mock”,首字母“G”代表“Go”😼。它的发音也类似“gnome”(地精),因此有友好的花园地精图标(由Michael Zolotov设计)。
安装
bashgo get github.com/orlangure/gnomock
示例:PostgreSQL容器设置
goimport ( "database/sql" "fmt" _ "github.com/lib/pq" // PostgreSQL驱动 "github.com/orlangure/gnomock" "github.com/orlangure/gnomock/preset/postgres" ) // 创建PostgreSQL预设 p := postgres.Preset( postgres.WithUser("gnomock", "gnomick"), // 用户名和密码 postgres.WithDatabase("mydb"), // 数据库名称 postgres.WithQueriesFile("/var/project/db/schema.sql"), // 执行SQL脚本设置初始状态 ) // 启动容器 container, err := gnomock.Start(p) if err != nil { // 处理错误 } defer func() { _ = gnomock.Stop(container) }() // 测试结束后停止容器 // 连接到PostgreSQL容器 connStr := fmt.Sprintf( "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", container.Host, container.DefaultPort(), "gnomock", "gnomick", "mydb", ) db, err := sql.Open("postgres", connStr) if err != nil { // 处理错误 } // db已包含所需的模式和数据,可直接使用
通过HTTP daemon使用Gnomock,需先启动Gnomock服务:
启动Gnomock服务(Docker方式)
bashdocker run -d -p 2304:2304 -v /var/run/docker.sock:/var/run/docker.sock --name gnomockd orlangure/gnomock
HTTP API调用示例(创建PostgreSQL容器)
bashcurl -X POST http://localhost:2304/start/postgres \ -H "Content-Type: application/json" \ -d '{ "user": "gnomock", "password": "gnomick", "database": "mydb", "queries_file": "/var/project/db/schema.sql" }'
响应将包含容器信息(主机、端口等),用于连接服务。
Gnomock的强大之处在于其预设,以下是支持的预设列表(支持版本经过CI管道测试,其他版本可能也能工作):
| 预设 | Go包 | HTTP API文档 | Go API参考 | 支持版本 |
|---|---|---|---|---|
| Localstack (AWS) | https://github.com/orlangure/gnomock/tree/master/preset/localstack | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/localstack?tab=doc | 0.12.2 |
| Splunk | https://github.com/orlangure/gnomock/tree/master/preset/splunk | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/splunk?tab=doc | 8.0.2 |
| Redis | https://github.com/orlangure/gnomock/tree/master/preset/redis | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/redis?tab=doc | 5.0.10, 6.0.9 |
| Memcached | https://github.com/orlangure/gnomock/tree/master/preset/memcached | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/memcached?tab=doc | 1.6.9 |
| MySQL | https://github.com/orlangure/gnomock/tree/master/preset/mysql | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/mysql?tab=doc | 5.7.32, 8.0.22 |
| MariaDB | https://github.com/orlangure/gnomock/tree/master/preset/mariadb | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/mariadb?tab=doc | 10.5.8 |
| PostgreSQL | https://github.com/orlangure/gnomock/tree/master/preset/postgres | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/postgres?tab=doc | 10.15, 11.10, 12.5, 13.1 |
| Microsoft SQL Server | https://github.com/orlangure/gnomock/tree/master/preset/mssql | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/mssql?tab=doc | 2017-latest, 2019-latest |
| MongoDB | https://github.com/orlangure/gnomock/tree/master/preset/mongo | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/mongo?tab=doc | 3.6.21, 4.4 |
| RabbitMQ | https://github.com/orlangure/gnomock/tree/master/preset/rabbitmq | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/rabbitmq?tab=doc | 3.8.9-alpine, 3.8.9-management-alpine |
| Kafka | https://github.com/orlangure/gnomock/tree/master/preset/kafka | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/kafka?tab=doc | 2.5.1-L0 |
| Elasticsearch | https://github.com/orlangure/gnomock/tree/master/preset/elastic | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/elastic?tab=doc | 5.6, 6.8.13, 7.9.3 |
| Kubernetes | https://github.com/orlangure/gnomock/tree/master/preset/k3s | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/k3s?tab=doc | v1.19.12 |
| CockroachDB | https://github.com/orlangure/gnomock/tree/master/preset/cockroachdb | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/cockroachdb?tab=doc | v19.2.11, v20.1.10 |
| InfluxDB | https://github.com/orlangure/gnomock/tree/master/preset/influxdb | 文档 | https://pkg.go.dev/github.com/orlangure/gnomock/preset/influxdb?tab=doc | 2.0.4-alpine |
本地测试时若网络速度不足以拉取Docker镜像可能导致此问题。可手动拉取所需镜像:
bashdocker pull postgres:11 # 例如拉取PostgreSQL 11镜像
容器可能无法在超时前就绪。Gnomock默认超时较长,若使用WithTimeout(HTTP中为timeout)修改超时,可能设置过短。
同时启动过多容器可能导致系统(尤其是CI环境)负载过高,容器无法在超时前就绪。建议分批运行测试。
通过Gnomock服务运行时,需确保设置中使用的文件挂载到容器内。启动服务时挂载工作目录:
bashdocker run -d -p 2304:2304 -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):$(pwd) --name gnomockd orlangure/gnomock
这样本地文件可在容器内访问。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务