Просмотр исходного кода

LCOW: add "no_lcow" build tag to allow disabling lcow

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 5 лет назад
Родитель
Сommit
0d3b400ab5

+ 0 - 12
pkg/system/init_unix.go

@@ -1,12 +0,0 @@
-// +build !windows
-
-package system // import "github.com/docker/docker/pkg/system"
-
-// InitLCOW does nothing since LCOW is a windows only feature
-func InitLCOW(experimental bool) {
-}
-
-// ContainerdRuntimeSupported returns true if the use of ContainerD runtime is supported.
-func ContainerdRuntimeSupported(_ bool, _ string) bool {
-	return true
-}

+ 0 - 11
pkg/system/init_windows.go

@@ -3,26 +3,15 @@ package system // import "github.com/docker/docker/pkg/system"
 import (
 	"os"
 
-	"github.com/Microsoft/hcsshim/osversion"
 	"github.com/sirupsen/logrus"
 )
 
 var (
-	// lcowSupported determines if Linux Containers on Windows are supported.
-	lcowSupported = false
-
 	// containerdRuntimeSupported determines if ContainerD should be the runtime.
 	// As of March 2019, this is an experimental feature.
 	containerdRuntimeSupported = false
 )
 
-// InitLCOW sets whether LCOW is supported or not. Requires RS5+
-func InitLCOW(experimental bool) {
-	if experimental && osversion.Build() >= osversion.RS5 {
-		lcowSupported = true
-	}
-}
-
 // InitContainerdRuntime sets whether to use ContainerD for runtime
 // on Windows. This is an experimental feature still in development, and
 // also requires an environment variable to be set (so as not to turn the

+ 29 - 13
pkg/system/lcow.go

@@ -1,32 +1,48 @@
+// +build windows,!no_lcow
+
 package system // import "github.com/docker/docker/pkg/system"
 
 import (
-	"runtime"
 	"strings"
 
+	"github.com/Microsoft/hcsshim/osversion"
 	specs "github.com/opencontainers/image-spec/specs-go/v1"
 	"github.com/pkg/errors"
 )
 
-// IsOSSupported determines if an operating system is supported by the host
-func IsOSSupported(os string) bool {
-	if strings.EqualFold(runtime.GOOS, os) {
-		return true
-	}
-	if LCOWSupported() && strings.EqualFold(os, "linux") {
-		return true
+var (
+	// lcowSupported determines if Linux Containers on Windows are supported.
+	lcowSupported = false
+)
+
+// InitLCOW sets whether LCOW is supported or not. Requires RS5+
+func InitLCOW(experimental bool) {
+	if experimental && osversion.Build() >= osversion.RS5 {
+		lcowSupported = true
 	}
-	return false
+}
+
+func LCOWSupported() bool {
+	return lcowSupported
 }
 
 // ValidatePlatform determines if a platform structure is valid.
 // TODO This is a temporary windows-only function, should be replaced by
 // comparison of worker capabilities
 func ValidatePlatform(platform specs.Platform) error {
-	if runtime.GOOS == "windows" {
-		if !(platform.OS == runtime.GOOS || (LCOWSupported() && platform.OS == "linux")) {
-			return errors.Errorf("unsupported os %s", platform.OS)
-		}
+	if !IsOSSupported(platform.OS) {
+		return errors.Errorf("unsupported os %s", platform.OS)
 	}
 	return nil
 }
+
+// IsOSSupported determines if an operating system is supported by the host
+func IsOSSupported(os string) bool {
+	if strings.EqualFold("windows", os) {
+		return true
+	}
+	if LCOWSupported() && strings.EqualFold(os, "linux") {
+		return true
+	}
+	return false
+}

+ 0 - 8
pkg/system/lcow_unix.go

@@ -1,8 +0,0 @@
-// +build !windows
-
-package system // import "github.com/docker/docker/pkg/system"
-
-// LCOWSupported returns true if Linux containers on Windows are supported.
-func LCOWSupported() bool {
-	return false
-}

+ 28 - 0
pkg/system/lcow_unsupported.go

@@ -0,0 +1,28 @@
+// +build !windows windows,no_lcow
+
+package system // import "github.com/docker/docker/pkg/system"
+import (
+	"runtime"
+	"strings"
+
+	specs "github.com/opencontainers/image-spec/specs-go/v1"
+)
+
+// InitLCOW does nothing since LCOW is a windows only feature
+func InitLCOW(_ bool) {}
+
+// LCOWSupported returns true if Linux containers on Windows are supported.
+func LCOWSupported() bool {
+	return false
+}
+
+// ValidatePlatform determines if a platform structure is valid. This function
+// is used for LCOW, and is a no-op on non-windows platforms.
+func ValidatePlatform(_ specs.Platform) error {
+	return nil
+}
+
+// IsOSSupported determines if an operating system is supported by the host.
+func IsOSSupported(os string) bool {
+	return strings.EqualFold(runtime.GOOS, os)
+}

+ 0 - 6
pkg/system/lcow_windows.go

@@ -1,6 +0,0 @@
-package system // import "github.com/docker/docker/pkg/system"
-
-// LCOWSupported returns true if Linux containers on Windows are supported.
-func LCOWSupported() bool {
-	return lcowSupported
-}

+ 6 - 0
project/PACKAGERS.md

@@ -191,6 +191,12 @@ NOTE: if you need to set more than one build tag, space separate them:
 export DOCKER_BUILDTAGS='apparmor selinux exclude_graphdriver_aufs'
 ```
 
+### LCOW (Linux Containers On Windows)
+
+LCOW is an experimental feature on Windows, and requires the daemon to run with
+experimental features enabled. Use the `no_lcow` build tag to disable the LCOW
+feature at compile time, 
+
 ### Static Daemon
 
 If it is feasible within the constraints of your distribution, you should