containerd 源码分析:创建 container(三)
文接 containerd 源码分析:创建 container(二) 启动 task 上节介绍了创建 task,task 创建之后将返回 response 给 ctr。接着,ctr 调用 task.Start 启动容器。 1// containerd/client/task.go 2func (t *task) Start(ctx context.Context) error { 3 r, err := t.client.TaskService().Start(ctx, &tasks.StartRequest{ 4 ContainerID: t.id, 5 }) 6 if err != nil { 7 ... 8 } 9 t.pid = r.Pid 10 return nil 11} 12 13// containerd/api/services/tasks/v1/tasks_grpc.pb.go 14func (c *tasksClient) Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error) { 15 out := new(StartResponse) 16 err := c.cc.Invoke(ctx, "/containerd.services.tasks.v1.Tasks/Start", in, out, opts...) 17 if err != nil { 18 return nil, err 19 } 20 return out, nil 21} ctr 调用 contaienrd 的 /containerd.services.tasks.v1.Tasks/Start 接口创建 task。进入 containerd 查看提供该服务的插件: ...