Change:
umbrella issue: kuberuntime uses to ]parse the version string of the api version]() from the runtime. When using with docker, it complains that Maybe we should just enforce that the api version returned by the runtime should be semver compatible. /cc
This is mentioned in . :) For now, we can add a after the docker apiversion to make it semver compatible.
Thanks for the reminder! We should make it clear in the API. This blocks kubelet from starting up, so we should fix it first.
I've checked the code, currently is only used in when checking the docker version compatibility. It is not exposed to the user by any means, so it should be fine to make some change ourselves, such as adding a . However, if we want to expose this to the user via in the future, it may make user confusing.

Discussion:
Version *string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` // The name of the container runtime. RuntimeName *string `protobuf:"bytes,2,opt,name=runtime_name,json=runtimeName" json:"runtime_name,omitempty"` <del> // The version of the container runtime. </del> <ins> // The version of the container runtime. The string should be // semver-compatible. </ins> RuntimeVersion *string `protobuf:"bytes,3,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` <del> // The API version of the container runtime. </del> <ins> // The API version of the container runtime. The string should be // semver-compatible. </ins> RuntimeApiVersion *string `protobuf:"bytes,4,opt,name=runtime_api_version,json=runtimeApiVersion" json:"runtime_api_version,omitempty"` XXX_unrecognized  []byte  `json:"-"` }

optional string version = 1; // The name of the container runtime. optional string runtime_name = 2; <del> // The version of the container runtime. </del> <ins> // The version of the container runtime. The string should be // semver-compatible. </ins> optional string runtime_version = 3; <del> // The API version of the container runtime. </del> <ins> // The API version of the container runtime. The string should be // semver-compatible. </ins> optional string runtime_api_version = 4; }

Name: makeContainerName(sandboxConfig, config), Config: &dockercontainer.Config{ // TODO: set User. <del> Hostname:   sandboxConfig.GetHostname(), </del> Entrypoint: dockerstrslice.StrSlice(config.GetCommand()), Cmd:        dockerstrslice.StrSlice(config.GetArgs()), Env:        generateEnvList(config.GetEnvs()),

containerTypeLabelContainer = "container" ) <del> func NewDockerSevice(client dockertools.DockerInterface) DockerLegacyService { </del> <ins> func NewDockerService(client dockertools.DockerInterface) DockerLegacyService { </ins> return &dockerService{ client: dockertools.NewInstrumentedDockerInterface(client), }

} // Version returns the runtime name, runtime version and runtime API version <del> func (ds *dockerService) Version(apiVersion string) (*runtimeApi.VersionResponse, error) { </del> <ins> func (ds *dockerService) Version(_ string) (*runtimeApi.VersionResponse, error) { </ins> v, err := ds.client.Version() if err != nil { return nil, fmt.Errorf("docker: failed to get docker version: %v", err) } runtimeAPIVersion := kubeAPIVersion name := dockerRuntimeName <ins> // Docker API version (e.g., 1.23) is not semver compatible. Add a ".0" // suffix to remedy this. apiVersion := fmt.Sprintf("%s.0", v.APIVersion) </ins> return &runtimeApi.VersionResponse{ Version:           &runtimeAPIVersion, RuntimeName:       &name, RuntimeVersion:    &v.Version, <del> RuntimeApiVersion: &v.APIVersion, </del> <ins> RuntimeApiVersion: &apiVersion, </ins> }, nil }

// dockerFilter wraps around dockerfilters.Args and provides methods to modify // the filter easily. type dockerFilter struct { <del> f *dockerfilters.Args </del> <ins> args *dockerfilters.Args </ins> } func newDockerFilter(args *dockerfilters.Args) *dockerFilter { <del> return &dockerFilter{f: args} </del> <ins> return &dockerFilter{args: args} </ins> } func (f *dockerFilter) Add(key, value string) { <del> f.Add(key, value) </del> <ins> f.args.Add(key, value) </ins> } func (f *dockerFilter) AddLabel(key, value string) {