
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
grpc-wiremock 是一个 GRPC服务模拟服务器,作为 WireMock HTTP服务器的封装实现。它通过提供的proto文件生成GRPC服务器,将GRPC请求转换为JSON格式后转发至WireMock,再将WireMock返回的HTTP响应转换回GRPC proto格式,实现GRPC服务的模拟。
!https://github.com/Adven27/grpc-wiremock/raw/master/doc/overview.png
tcp://localhost:50000http://localhost:8888poshdocker run -p 8888:8888 -p 50000:50000 -v $(pwd)/example/proto:/proto -v $(pwd)/example/wiremock:/wiremock adven27/grpc-wiremock
参数说明:
-p 8888:8888: 映射WireMock HTTP服务器端口-p 50000:50000: 映射GRPC服务器端口-v $(pwd)/example/proto:/proto: 挂载proto文件目录-v $(pwd)/example/wiremock:/wiremock: 挂载WireMock配置目录通过WireMock JSON API创建存根:
poshcurl -X POST http://localhost:8888/__admin/mappings \ -d '{ "request": { "method": "POST", "url": "/BalanceService/getUserBalance", "headers": {"withAmount": {"matches": "\\d+\\.?\\d*"} }, "bodyPatterns" : [ { "equalToJson" : { "userId": "1", "currency": "EUR" } } ] }, "response": { "status": 200, "jsonBody": { "balance": { "amount": { "value": { "decimal" : "{{request.headers.withAmount}}" }, "value_present": true }, "currency": { "value": "EUR", "value_present": true } } } } }'
使用grpcurl发送GRPC请求验证:
poshgrpcurl -H 'withAmount: 100.0' -plaintext -d '{"id": 1, "currency": "EUR"}' localhost:50000 api.wallet.BalanceService/getUserBalance
预期响应:
json{ "balance": { "amount": { "value": { "decimal": "100.0" }, "value_present": true }, "currency": { "value": "EUR", "value_present": true } } }
存根配置需通过 WireMock JSON API 完成。
默认HTTP状态码到GRPC状态码的映射基于 https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto%EF%BC%9A
| HTTP状态码 | GRPC状态 |
|---|---|
| 400 Bad Request | INVALID_ARGUMENT |
| 401 Unauthorized | UNAUTHENTICATED |
| 403 Forbidden | PERMISSION_DENIED |
| 404 Not Found | NOT_FOUND |
| 409 Conflict | ALREADY_EXISTS |
| 429 Too Many Requests | RESOURCE_EXHAUSTED |
| 499 Client Closed Request | CANCELLED |
| 500 Internal Server Error | INTERNAL |
| 501 Not Implemented | UNIMPLEMENTED |
| 503 Service Unavailable | UNAVAILABLE |
| 504 Gateway Timeout | DEADLINE_EXCEEDED |
自定义错误映射:通过环境变量覆盖或扩展映射,格式为GRPC_ERRORCODEBY_HTTP_STATUSCODE_<HTTP状态码>=<GRPC状态>。
示例:
poshdocker run \ -e GRPC_ERRORCODEBY_HTTP_STATUSCODE_400=OUT_OF_RANGE \ -e GRPC_ERRORCODEBY_HTTP_STATUSCODE_510=DATA_LOSS \ adven27/grpc-wiremock
支持以下环境变量配置GRPC服务器:
| 环境变量 | 描述 |
|---|---|
| GRPC_SERVER_PORT | GRPC服务器端口 |
| GRPC_SERVER_MAXHEADERLISTSIZE | 最大请求头列表大小 |
| GRPC_SERVER_MAXMESSAGESIZE | 最大消息大小 |
| GRPC_SERVER_MAXINBOUNDMETADATASIZE | 最大入站元数据大小 |
| GRPC_SERVER_MAXINBOUNDMESSAGESIZE | 最大入站消息大小 |
示例:
poshdocker run -e GRPC_SERVER_MAXHEADERLISTSIZE=1000 adven27/grpc-wiremock
通过环境变量传递WireMock命令行选项,选项需添加WIREMOCK_前缀。
示例:
poshdocker run -e WIREMOCK_DISABLE-REQUEST-LOGGING -e WIREMOCK_PORT=0 adven27/grpc-wiremock
完整WireMock命令行选项参见 WireMock文档
对于返回流的GRPC服务,通过response.headers.streamSize指定流中返回的响应数量(默认1),当前迭代序号可通过request.headers.streamCursor获取。
示例:
假设proto定义:
protobufservice WalletService { rpc searchTransaction (SearchTransactionRequest) returns (stream SearchTransactionResponse) {} }
创建存根:
poshcurl -X POST http://localhost:8888/__admin/mappings \ -d '{ "request": { "method": "POST", "url": "/WalletService/searchTransaction" }, "response": { "fixedDelayMilliseconds": 1000, "headers": {"streamSize": "5" }, "jsonBody": { "transactions": [ { "id": "{{request.headers.streamCursor}}", "userId": "1", "currency": "EUR", "amount": { "decimal": "{{request.headers.streamCursor}}00" } }, { "id": "100{{request.headers.streamCursor}}", "userId": "2", "currency": "EUR", "amount": { "decimal": "200" } } ] } } }'
若无需修改proto文件,可构建包含预编译proto的自定义镜像,示例Dockerfile参见 https://github.com/Adven27/grpc-wiremock/tree/master/example/Dockerfile%E3%80%82
通过EXTERNAL_CODECS环境变量启用Snappy压缩(默认支持gzip):
Docker运行示例:
poshdocker run -e EXTERNAL_CODECS="snappy" adven27/grpc-wiremock
Docker Compose示例:
yamlservices: grpc-wiremock: image: adven27/grpc-wiremock ports: - "12085:50000" # GRPC端口 - "8088:8888" # WireMock HTTP端口 volumes: - ./example/proto:/proto environment: - EXTERNAL_CODECS=snappy
启用load配置文件可优化WireMock性能,等价于设置多个性能相关选项:
poshdocker run -e SPRING_PROFILES_ACTIVE=load adven27/grpc-wiremock
等价于:
poshdocker run \ -e WIREMOCK_NO-REQUEST-JOURNAL \ -e WIREMOCK_DISABLE-REQUEST-LOGGING \ -e WIREMOCK_ASYNC-RESPONSE-ENABLED \ -e WIREMOCK_ASYNC-RESPONSE-THREADS=10 \ adven27/grpc-wiremock
默认存根中需使用lowerCamelCase引用proto字段(如proto字段user_id需写为userId)。设置JSON_PRESERVING_PROTO_FIELD_NAMES=true可保留原始字段名:
poshdocker run -e JSON_PRESERVING_PROTO_FIELD_NAMES=true adven27/grpc-wiremock
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

来自真实用户的反馈,见证轩辕镜像的优质服务