You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用grpcurl正确调用containerd的gRPC API?

unknown service types.API报错的核心原因是使用了适配containerd 0.x早期测试版的过时proto定义。1.0及以上正式版本的containerd对gRPC API做了全量重构,旧版types.API相关的服务已经被完全移除,不管怎么调整服务名的点/斜杠写法、替换protoset文件都不可能调用成功。

正确操作步骤
  • 开启containerd的gRPC反射功能
    编辑containerd配置文件(默认路径/etc/containerd/config.toml),在[grpc]配置段下添加配置项:
    enable_reflection = true
    
    保存后执行命令重启服务生效:
    systemctl restart containerd
    
  • 查询服务端真实暴露的服务列表
    开启反射后不需要手动指定proto或protoset文件,直接执行以下命令就能列出当前containerd实际支持的所有gRPC服务:
    sudo grpcurl -plaintext -unix /run/containerd/containerd.sock list
    
    正常输出的服务都是containerd.services.*前缀,常见服务包括:
    • 版本查询服务:containerd.services.version.v1.Version
    • 容器管理服务:containerd.services.containers.v1.Containers
    • 任务/运行时服务:containerd.services.tasks.v1.Tasks
  • 发起基础gRPC调用示例
    查询containerd版本信息直接执行:
    sudo grpcurl -plaintext -unix /run/containerd/containerd.sock containerd.services.version.v1.Version/Version
    
    命令会直接返回JSON格式的版本号、提交哈希、运行时版本等信息。
    你之前要调用的状态/统计接口,对应任务服务下的Metrics方法,调用时需要传入目标容器ID参数:
    sudo grpcurl -plaintext -unix /run/containerd/containerd.sock -d '{"id":"替换成实际容器ID"}' containerd.services.tasks.v1.Tasks/Metrics
    
额外说明

你之前下载的api/grpc/types/api.proto是containerd早期0.2.x版本遗留的旧API文件,和现在所有主流发行版、官方源提供的containerd 1.x/2.x版本完全不兼容,不需要再使用这套旧文件做调用。如果不想开启反射,也可以使用对应containerd版本自带的新版proto定义,路径为containerd/services/下按模块、版本划分的proto文件,不要使用旧的types路径下的文件。

内容的提问来源于stack exchange,提问作者itasahobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:15:45