Przeglądaj źródła

builder/dockerfile: remove leftover LCOW platform checks

This removes some of the checks that were added in 0cba7740d41369eee33b671f26276325580bc07b,
but should no longer be needed.

- `dockerfile.BuildFromConfig()` is used for `docker (container) commmit` and
  `docker (image) import`. For `docker import`, we're failing early already.
  For `commit`, it won't be possible to have a container that doesn't have the
  right operating-system, so there's no need to validate.
- `dispatchRequest.getImageOrStage()`: simplify the check; all checks resulted
  in an error on Windows, so it came down to "Windows does not support FROM scratch".
- `dispatchState.beginStage()`: `image.OperatingSystem()` already defaults to the
  `runtime.GOOS` if unset, so remove the local default fallback.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 3 lat temu
rodzic
commit
cfddecc3d2

+ 0 - 4
builder/dockerfile/builder.go

@@ -18,7 +18,6 @@ import (
 	"github.com/docker/docker/pkg/idtools"
 	"github.com/docker/docker/pkg/idtools"
 	"github.com/docker/docker/pkg/streamformatter"
 	"github.com/docker/docker/pkg/streamformatter"
 	"github.com/docker/docker/pkg/stringid"
 	"github.com/docker/docker/pkg/stringid"
-	"github.com/docker/docker/pkg/system"
 	"github.com/moby/buildkit/frontend/dockerfile/instructions"
 	"github.com/moby/buildkit/frontend/dockerfile/instructions"
 	"github.com/moby/buildkit/frontend/dockerfile/parser"
 	"github.com/moby/buildkit/frontend/dockerfile/parser"
 	"github.com/moby/buildkit/frontend/dockerfile/shell"
 	"github.com/moby/buildkit/frontend/dockerfile/shell"
@@ -319,9 +318,6 @@ func (b *Builder) dispatchDockerfileWithCancellation(parseResult []instructions.
 //
 //
 // TODO: Remove?
 // TODO: Remove?
 func BuildFromConfig(config *container.Config, changes []string, os string) (*container.Config, error) {
 func BuildFromConfig(config *container.Config, changes []string, os string) (*container.Config, error) {
-	if !system.IsOSSupported(os) {
-		return nil, errdefs.InvalidParameter(system.ErrNotSupportedOperatingSystem)
-	}
 	if len(changes) == 0 {
 	if len(changes) == 0 {
 		return config, nil
 		return config, nil
 	}
 	}

+ 9 - 17
builder/dockerfile/dispatchers.go

@@ -246,27 +246,19 @@ func (d *dispatchRequest) getImageOrStage(name string, platform *specs.Platform)
 		platform = d.builder.platform
 		platform = d.builder.platform
 	}
 	}
 
 
-	// Windows cannot support a container with no base image unless it is LCOW.
+	// Windows cannot support a container with no base image.
 	if name == api.NoBaseImageSpecifier {
 	if name == api.NoBaseImageSpecifier {
-		p := platforms.DefaultSpec()
-		if platform != nil {
-			p = *platform
+		// Windows supports scratch. What is not supported is running containers from it.
+		if runtime.GOOS == "windows" {
+			return nil, errors.New("Windows does not support FROM scratch")
 		}
 		}
-		imageImage := &image.Image{}
-		imageImage.OS = p.OS
 
 
-		// old windows scratch handling
 		// TODO: scratch should not have an os. It should be nil image.
 		// TODO: scratch should not have an os. It should be nil image.
-		// Windows supports scratch. What is not supported is running containers
-		// from it.
-		if runtime.GOOS == "windows" {
-			if platform == nil || platform.OS == "linux" {
-				return nil, errors.New("Linux containers are not supported on this system")
-			} else if platform.OS == "windows" {
-				return nil, errors.New("Windows does not support FROM scratch")
-			} else {
-				return nil, errors.Errorf("platform %s is not supported", platforms.Format(p))
-			}
+		imageImage := &image.Image{}
+		if platform != nil {
+			imageImage.OS = platform.OS
+		} else {
+			imageImage.OS = runtime.GOOS
 		}
 		}
 		return builder.Image(imageImage), nil
 		return builder.Image(imageImage), nil
 	}
 	}

+ 1 - 1
builder/dockerfile/dispatchers_test.go

@@ -117,7 +117,7 @@ func TestFromScratch(t *testing.T) {
 	err := initializeStage(sb, cmd)
 	err := initializeStage(sb, cmd)
 
 
 	if runtime.GOOS == "windows" {
 	if runtime.GOOS == "windows" {
-		assert.Check(t, is.Error(err, "Linux containers are not supported on this system"))
+		assert.Check(t, is.Error(err, "Windows does not support FROM scratch"))
 		return
 		return
 	}
 	}
 
 

+ 0 - 4
builder/dockerfile/evaluator.go

@@ -21,7 +21,6 @@ package dockerfile // import "github.com/docker/docker/builder/dockerfile"
 
 
 import (
 import (
 	"reflect"
 	"reflect"
-	"runtime"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 
 
@@ -216,9 +215,6 @@ func (s *dispatchState) beginStage(stageName string, image builder.Image) error
 	s.stageName = stageName
 	s.stageName = stageName
 	s.imageID = image.ImageID()
 	s.imageID = image.ImageID()
 	s.operatingSystem = image.OperatingSystem()
 	s.operatingSystem = image.OperatingSystem()
-	if s.operatingSystem == "" { // In case it isn't set
-		s.operatingSystem = runtime.GOOS
-	}
 	if !system.IsOSSupported(s.operatingSystem) {
 	if !system.IsOSSupported(s.operatingSystem) {
 		return system.ErrNotSupportedOperatingSystem
 		return system.ErrNotSupportedOperatingSystem
 	}
 	}