fullstorydev/grpcurlgrpcurl是一款用于与gRPC服务器交互的命令行工具,功能类似于HTTP客户端工具cURL,但专门针对gRPC协议设计。该工具支持探索gRPC服务定义及调用gRPC方法,适用于gRPC服务的开发调试、监控与测试场景。
源码地址:[***]
grpcurl Docker镜像以grpcurl可执行文件为入口,使用时通过docker run命令传递参数。基础语法:
bashdocker run --rm fullstorydev/grpcurl [全局参数] <服务器地址> <命令> [命令参数]
说明:
--rm确保容器退出后自动清理;fullstorydev/grpcurl为官方镜像(假设,实际需替换为具体镜像名)。
列出目标服务器上所有gRPC服务:
bashdocker run --rm fullstorydev/grpcurl --plaintext grpc-server:50051 list
参数:
--plaintext:禁用TLS(适用于开发环境非加密连接);list:命令,列出服务。
列出指定服务的所有方法:
bashdocker run --rm fullstorydev/grpcurl --plaintext grpc-server:50051 list myservice.UserService
查看方法详细定义(包括请求/响应消息结构):
bashdocker run --rm fullstorydev/grpcurl --plaintext grpc-server:50051 describe myservice.UserService.GetUser
调用myservice.UserService.GetUser方法,传入JSON格式请求数据:
bashdocker run --rm fullstorydev/grpcurl --plaintext -d '{"user_id": "123"}' grpc-server:50051 myservice.UserService.GetUser
参数:
-d:指定请求数据(JSON格式);最后一个参数为<服务名>.<方法名>。
若服务未启用Reflection,需通过本地Proto文件指定服务定义:
bashdocker run --rm -v $(pwd)/protos:/protos fullstorydev/grpcurl \ --plaintext \ -import-path /protos \ -proto user_service.proto \ grpc-server:50051 \ myservice.UserService.GetUser
参数:
-v $(pwd)/protos:/protos:挂载本地protos目录至容器内/protos;-import-path:指定Proto文件导入路径;-proto:指定Proto文件名。
调用返回流式响应的方法(如实时日志推送):
bashdocker run --rm fullstorydev/grpcurl --plaintext -d '{"stream_id": "log-stream-1"}' grpc-server:50051 myservice.LogService.StreamLogs
| 参数 | 用途 | 示例 |
|---|---|---|
--plaintext | 禁用TLS,使用纯文本HTTP/2连接 | --plaintext |
-d <data> | 指定请求数据(JSON格式或文件路径) | -d '{"user_id": "123"}' 或 -d @request.json |
-import-path <path> | 指定Proto文件导入路径 | -import-path /protos |
-proto <file> | 指定Proto文件名(需配合-import-path) | -proto user_service.proto |
-H <header> | 添加请求头(如认证Token) | -H "Authorization: Bearer <token>" |
-o <file> | 将响应输出至文件 | -o response.json |
list | 列出服务/方法/消息类型 | list myservice.UserService |
describe | 查看服务/方法/消息的详细定义 | describe myservice.UserRequest |
若需频繁使用本地Proto文件或固定配置,可通过docker-compose.yml简化命令:
yamlversion: '3' services: grpcurl: image: fullstorydev/grpcurl volumes: - ./protos:/protos # 挂载本地Proto文件目录 command: > --plaintext -import-path /protos -proto user_service.proto grpc-server:50051 myservice.UserService.GetUser
运行:
bashdocker-compose run --rm grpcurl
说明:
grpc-server需与当前Compose网络中的gRPC服务容器名一致。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务