github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/integration/internal/requirement/requirement_linux.go (about)

     1  package requirement // import "github.com/docker/docker/integration/internal/requirement"
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/docker/docker/pkg/parsers/kernel"
     7  	"gotest.tools/icmd"
     8  )
     9  
    10  func overlayFSSupported() bool {
    11  	result := icmd.RunCommand("/bin/sh", "-c", "cat /proc/filesystems")
    12  	if result.Error != nil {
    13  		return false
    14  	}
    15  	return strings.Contains(result.Combined(), "overlay\n")
    16  }
    17  
    18  // Overlay2Supported returns true if the current system supports overlay2 as graphdriver
    19  func Overlay2Supported(kernelVersion string) bool {
    20  	if !overlayFSSupported() {
    21  		return false
    22  	}
    23  
    24  	daemonV, err := kernel.ParseRelease(kernelVersion)
    25  	if err != nil {
    26  		return false
    27  	}
    28  	requiredV := kernel.VersionInfo{Kernel: 4}
    29  	return kernel.CompareKernelVersion(*daemonV, requiredV) > -1
    30  
    31  }