services/server/server.go
func New(ctx context.Context, config srvconfig.Config) (Server, error)
for _, p := range plugins {...// check for grpc services that should be registered with the serverif src, ok := instance.(plugin.Service); ok {grpcServices = append(grpcServices, src)}...}//注册grpc servicefor _, service := range grpcServices {if err := service.Register(grpcServer); err != nil {return nil, err}}
grpc service列表:

一个典型的service:task service
services/tasks/service.go
func (s *service) Start(ctx context.Context, r *api.StartRequest) (*api.StartResponse, error) {return s.local.Start(ctx, r)}
func (l *local) Start(ctx context.Context, r *api.StartRequest, _ ...grpc.CallOption) (*api.StartResponse, error) {t, err := l.getTask(ctx, r.ContainerID)if err != nil {return nil, err}// shim的client,v1指向 runtime/v1/linux/process.gop := runtime.Process(t)if r.ExecID != "" {if p, err = t.Process(ctx, r.ExecID); err != nil {return nil, errdefs.ToGRPC(err)}}if err := p.Start(ctx); err != nil {return nil, errdefs.ToGRPC(err)}state, err := p.State(ctx)if err != nil {return nil, errdefs.ToGRPC(err)}return &api.StartResponse{Pid: state.Pid,}, nil}
