如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
GripMock 是一个 gRPC 服务的 mock 服务器,通过 .proto 文件或编译后的 .pb 描述符生成 gRPC 服务实现。您可以使用它搭建端到端测试环境,或在软件开发阶段作为虚拟服务器使用。服务器使用 Go 语言实现,客户端可支持任何编程语言的 gRPC 客户端。
本项目是 https://github.com/tokopedia/gripmock 的分支版本,具有更优的性能和更多增强功能,包括更新依赖、支持 YAML 静态存根、健康检查端点等。
.proto 文件、包含多个 .proto 文件的文件夹或编译后的 .pb 描述符启动服务/api/health/liveness 和 /api/health/readiness 端点equals(精确匹配)、contains(包含匹配)、matches(正则匹配),支持嵌套字段和 ignoreArrayOrder(忽略数组顺序).pb 描述符以加快启动速度Docker 镜像(推荐)
bashdocker pull bavix/gripmock
其他安装方式
Homebrew(macOS/Linux):
bashbrew tap bavix/homebrew-gripmock brew install gripmock
预编译二进制:从 https://github.com/bavix/gripmock/releases 下载对应平台的二进制文件并添加到 PATH
Go 直接安装:
bashgo install github.com/bavix/gripmock/v3@latest
对于复杂项目,推荐编译 .pb 描述符以加快启动速度:
使用 protoc:
bashprotoc --proto_path=. --descriptor_set_out=service.pb --include_imports hello.proto
使用 buf:
bashbuf build -o service.pb
基础启动
bash# 通过 .pb 文件启动 gripmock service.pb # 通过 .proto 文件启动 gripmock service.proto # 通过包含 .proto 文件的文件夹启动 gripmock protofolder/
静态存根启动
指定包含静态存根文件的文件夹:
bash# 文件夹中的 proto 文件 gripmock --stub stubfolder/ protofolder/ # 单个 proto 文件 gripmock --stub stubfolder/ service.proto # 预编译 .pb 文件 gripmock --stub stubfolder/ service.pb
文件夹中的 proto 文件
bashdocker run -p 4770:4770 -p 4771:4771 \ -v /本地存根文件夹:/stubs \ -v /本地proto文件夹:/proto \ bavix/gripmock /proto/
单个 proto 文件
bashdocker run -p 4770:4770 -p 4771:4771 \ -v /本地存根文件夹:/stubs \ -v /本地proto文件夹:/proto \ bavix/gripmock /proto/service.proto
预编译 .pb 文件
bashdocker run -p 4770:4770 -p 4771:4771 \ -v /本地存根文件夹:/stubs \ -v /本地pb文件路径:/proto \ bavix/gripmock /proto/service.pb
端口说明:
- 4770:gRPC 服务端口(客户端连接)
- 4771:HTTP 管理端口(Web UI 和 REST API)
通过 HTTP 存根服务器(端口 4771)管理存根,支持以下接口:
GET /api/stubs:列出所有存根POST /api/stubs:添加新存根POST /api/stubs/search:搜索匹配的存根DELETE /api/stubs:清除所有存根存根格式(JSON)
json{ "service": "Greeter", // proto 中定义的服务名 "method": "SayHello", // 要模拟的方法名 "headers": { // 可选,请求头匹配规则 "equals": { "authorization": "token" } }, "input": { // 输入匹配规则 "ignoreArrayOrder": true, // 可选,忽略数组顺序 "equals": { "name": "gripmock" } }, "output": { // 匹配成功的输出 "data": { "message": "Hello" }, // 响应数据 "headers": { "x-resp": "ok" }, // 可选,响应头 "error": "错误信息", // 可选,错误消息(指定则返回错误) "code": "2" // 可选,gRPC 错误码(非 0 则返回错误) } }
添加动态存根示例
bashcurl -X POST -H "Content-Type: application/json" -d '{ "service": "Greeter", "method": "SayHello", "input": { "equals": { "name": "gripmock" } }, "output": { "data": { "message": "Hello GripMock" } } }' http://localhost:4771/api/stubs
将存根文件(JSON/YAML 格式)放置在文件夹中,通过 --stub 参数指定:
yaml# stub.yaml 示例 - service: Greeter method: SayHello input: equals: name: gripmock output: data: message: Hello GripMock
启动命令:
bash# 本地 gripmock --stub ./stubfolder ./service.proto # Docker docker run -p 4770:4770 -p 4771:4771 \ -v /本地存根文件夹:/stubs \ -v /本地proto文件夹:/proto \ bavix/gripmock --stub /stubs /proto/service.proto
支持三种匹配方式,可作用于嵌套字段和数组:
equals(精确匹配)
匹配输入中指定字段的精确值(默认检查数组顺序):
json"input": { "equals": { "name": "gripmock", "greetings": { "english": "Hello" }, "numbers": [1, 2, 3], "active": true } }
contains(包含匹配)
匹配输入中包含指定字段及值:
json"input": { "contains": { "user": { "id": "123" }, "tags": ["test"] } }
matches(正则匹配)
使用正则表达式匹配字符串字段:
json"input": { "matches": { "email": "^[a-z]+@example\\.com$", "id": "^\\d{6}$" } }
ignoreArrayOrder(忽略数组顺序)
配合 equals 使用,忽略数组元素顺序:
json"input": { "ignoreArrayOrder": true, "equals": { "numbers": [3, 1, 2] } // 匹配 [1,2,3]、[2,1,3] 等 }
与输入匹配规则类似,支持 equals、contains、matches:
json"headers": { "equals": { "authorization": "Bearer token" }, "contains": { "x-version": "v1" }, "matches": { "request-id": "^[a-f0-9-]+$" } }
本项目采用 MIT 许可证,详情参见 https://github.com/bavix/gripmock/blob/master/LICENSE%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务