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

如何通过grpcurl结合containerd.sock及image.proto拉取镜像?

解决containerd通过gRPC拉取镜像的问题

首先明确:containerd.services.images.v1.Images/Create接口不是用于从远程仓库拉取镜像的,它仅用于创建本地镜像的元数据条目,因此你调用它无法完成拉取操作,这也是你遇到错误的核心原因。

正确的拉取方式:使用Pull接口

要通过gRPC拉取镜像,你需要调用containerd.services.images.v1.Images/Pull方法,该方法才是containerd专门用于从远程仓库拉取镜像的gRPC接口。

示例命令

./grpcurl -d '{
  "name": "DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5",
  "opts": {
    "platform": "linux/amd64"
  }
}' -plaintext -proto image.proto -rpc-header containerd-namespace:k8s.io -unix /run/containerd/containerd.sock containerd.services.images.v1.Images/Pull

参数说明

  • name:指定要拉取的镜像完整名称(包含仓库、镜像名和标签/摘要)
  • opts:可选参数,用于指定拉取选项,比如platform(指定目标平台,适用于多架构镜像);如果私有仓库需要认证,可添加auth字段,值为Base64编码的用户名:密码字符串

之前错误的原因解释

  1. 第一次调用错误:JSON格式不符合Create接口的请求结构,image字段需要是对象而非字符串,触发了JSON解析失败。
  2. 第二次调用错误:虽然JSON格式正确,但Create接口不处理远程拉取逻辑,服务端无法处理该请求导致连接断开,返回EOF错误。

关于api.proto的疑问

不需要使用api.proto,containerd的镜像服务已标准化到你找到的api/services/images/v1/images.proto文件,直接使用该proto调用对应接口即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:27:27