dotcloud/docker

View on GitHub
integration/internal/requirement/requirement_linux.go

Summary

Maintainability
A
0 mins
Test Coverage
package requirement // import "github.com/docker/docker/integration/internal/requirement"

import (
    "os"
    "strings"

    "github.com/docker/docker/pkg/parsers/kernel"
    "gotest.tools/v3/icmd"
)

// CgroupNamespacesEnabled checks if cgroup namespaces are enabled on this host
func CgroupNamespacesEnabled() bool {
    if _, err := os.Stat("/proc/self/ns/cgroup"); os.IsNotExist(err) {
        return false
    }

    return true
}

func overlayFSSupported() bool {
    result := icmd.RunCommand("/bin/sh", "-c", "cat /proc/filesystems")
    if result.Error != nil {
        return false
    }
    return strings.Contains(result.Combined(), "overlay\n")
}

// Overlay2Supported returns true if the current system supports overlay2 as graphdriver
func Overlay2Supported(kernelVersion string) bool {
    if !overlayFSSupported() {
        return false
    }

    daemonV, err := kernel.ParseRelease(kernelVersion)
    if err != nil {
        return false
    }
    requiredV := kernel.VersionInfo{Kernel: 4}
    return kernel.CompareKernelVersion(*daemonV, requiredV) > -1
}