diff --git a/integration-cli/docker_cli_daemon_plugins_test.go b/integration-cli/docker_cli_daemon_plugins_test.go index 1e6ab7fa66..cb4ce547e1 100644 --- a/integration-cli/docker_cli_daemon_plugins_test.go +++ b/integration-cli/docker_cli_daemon_plugins_test.go @@ -236,7 +236,7 @@ func (s *DockerDaemonSuite) TestVolumePlugin(c *check.C) { } func (s *DockerDaemonSuite) TestGraphdriverPlugin(c *check.C) { - testRequires(c, Network, IsAmd64, DaemonIsLinux, overlaySupported) + testRequires(c, Network, IsAmd64, DaemonIsLinux, overlay2Supported) s.d.Start(c) @@ -246,7 +246,7 @@ func (s *DockerDaemonSuite) TestGraphdriverPlugin(c *check.C) { c.Assert(err, checker.IsNil, check.Commentf(out)) // restart the daemon with the plugin set as the storage driver - s.d.Restart(c, "-s", plugin) + s.d.Restart(c, "-s", plugin, "--storage-opt", "overlay2.override_kernel_check=1") // run a container out, err = s.d.Cmd("run", "--rm", "busybox", "true") // this will pull busybox using the plugin diff --git a/integration-cli/docker_test_vars.go b/integration-cli/docker_test_vars.go index fa80b53c9d..a3cdf54ae4 100644 --- a/integration-cli/docker_test_vars.go +++ b/integration-cli/docker_test_vars.go @@ -66,6 +66,8 @@ var ( // daemonPid is the pid of the main test daemon daemonPid int + + daemonKernelVersion string ) func init() { @@ -111,6 +113,7 @@ func init() { type Info struct { DockerRootDir string ExperimentalBuild bool + KernelVersion string } var i Info status, b, err := sockRequest("GET", "/info", nil) @@ -118,6 +121,7 @@ func init() { if err = json.Unmarshal(b, &i); err == nil { dockerBasePath = i.DockerRootDir experimentalDaemon = i.ExperimentalBuild + daemonKernelVersion = i.KernelVersion } } volumesConfigPath = dockerBasePath + "/volumes" diff --git a/integration-cli/requirements_unix.go b/integration-cli/requirements_unix.go index 53f0a6d36e..ef017d8a76 100644 --- a/integration-cli/requirements_unix.go +++ b/integration-cli/requirements_unix.go @@ -8,6 +8,7 @@ import ( "os/exec" "strings" + "github.com/docker/docker/pkg/parsers/kernel" "github.com/docker/docker/pkg/sysinfo" ) @@ -124,7 +125,7 @@ var ( }, "Test cannot be run without a kernel (4.3+) supporting ambient capabilities", } - overlaySupported = testRequirement{ + overlayFSSupported = testRequirement{ func() bool { cmd := exec.Command(dockerBinary, "run", "--rm", "busybox", "/bin/sh", "-c", "cat /proc/filesystems") out, err := cmd.CombinedOutput() @@ -133,7 +134,23 @@ var ( } return bytes.Contains(out, []byte("overlay\n")) }, - "Test cannot be run wihtout suppport for ovelayfs", + "Test cannot be run without suppport for overlayfs", + } + overlay2Supported = testRequirement{ + func() bool { + if !overlayFSSupported.Condition() { + return false + } + + daemonV, err := kernel.ParseRelease(daemonKernelVersion) + if err != nil { + return false + } + requiredV := kernel.VersionInfo{Kernel: 4} + return kernel.CompareKernelVersion(*daemonV, requiredV) > -1 + + }, + "Test cannot be run without overlay2 support (kernel 4.0+)", } )