Merge pull request #43057 from feiskyer/docker-version
Automatic merge from submit-queue kubelet: check and enforce minimum docker api version **What this PR does / why we need it**: This PR adds enforcing a minimum docker api version (same with what we have do for dockertools). **Which issue this PR fixes** Fixes #42696. **Release note**: ```release-note NONE ```
This commit is contained in:
		@@ -47,6 +47,10 @@ const (
 | 
			
		||||
	dockerRuntimeName = "docker"
 | 
			
		||||
	kubeAPIVersion    = "0.1.0"
 | 
			
		||||
 | 
			
		||||
	// https://docs.docker.com/engine/reference/api/docker_remote_api/
 | 
			
		||||
	// docker version should be at least 1.10.x
 | 
			
		||||
	minimumDockerAPIVersion = "1.22.0"
 | 
			
		||||
 | 
			
		||||
	// String used to detect docker host mode for various namespaces (e.g.
 | 
			
		||||
	// networking). Must match the value returned by docker inspect -f
 | 
			
		||||
	// '{{.HostConfig.NetworkMode}}'.
 | 
			
		||||
@@ -164,6 +168,13 @@ func NewDockerService(client dockertools.DockerInterface, seccompProfileRoot str
 | 
			
		||||
		containerManager:  cm.NewContainerManager(cgroupsName, client),
 | 
			
		||||
		checkpointHandler: checkpointHandler,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// check docker version compatibility.
 | 
			
		||||
	if err = ds.checkVersionCompatibility(); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create streaming server if configured.
 | 
			
		||||
	if streamingConfig != nil {
 | 
			
		||||
		var err error
 | 
			
		||||
		ds.streamingServer, err = streaming.NewServer(*streamingConfig, ds.streamingRuntime)
 | 
			
		||||
@@ -379,6 +390,27 @@ func (ds *dockerService) GenerateExpectedCgroupParent(cgroupParent string) (stri
 | 
			
		||||
	return cgroupParent, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// checkVersionCompatibility verifies whether docker is in a compatible version.
 | 
			
		||||
func (ds *dockerService) checkVersionCompatibility() error {
 | 
			
		||||
	apiVersion, err := ds.getDockerAPIVersion()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	minAPIVersion, err := semver.Parse(minimumDockerAPIVersion)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Verify the docker version.
 | 
			
		||||
	result := apiVersion.Compare(minAPIVersion)
 | 
			
		||||
	if result < 0 {
 | 
			
		||||
		return fmt.Errorf("docker API version is older than %s", minimumDockerAPIVersion)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// getDockerAPIVersion gets the semver-compatible docker api version.
 | 
			
		||||
func (ds *dockerService) getDockerAPIVersion() (*semver.Version, error) {
 | 
			
		||||
	var dv *dockertypes.Version
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user