From fd15ddbc30109310ee9fe1618cc93c8c5df5aa2d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 6 Sep 2023 11:50:03 +0200 Subject: [PATCH] daemon: GetImageAndReleasableLayer: simplify "FROM scratch" case Windows doesn't support "FROM scratch", and the platform was only used for validation on other platforms if a platform was provided, so no need to set defaults. Signed-off-by: Sebastiaan van Stijn --- daemon/containerd/image_builder.go | 14 +++++--------- daemon/images/image_builder.go | 13 ++++++------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/daemon/containerd/image_builder.go b/daemon/containerd/image_builder.go index 6778194f99..e52815d82b 100644 --- a/daemon/containerd/image_builder.go +++ b/daemon/containerd/image_builder.go @@ -45,22 +45,18 @@ const imageLabelClassicBuilderParent = "org.mobyproject.image.parent" // reference or ID. Every call to GetImageAndReleasableLayer MUST call // releasableLayer.Release() to prevent leaking of layers. func (i *ImageService) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ROLayer, error) { - if refOrID == "" { // from SCRATCH - imgOS := runtime.GOOS + if refOrID == "" { // FROM scratch if runtime.GOOS == "windows" { - imgOS = "linux" + return nil, nil, fmt.Errorf(`"FROM scratch" is not supported on Windows`) } if opts.Platform != nil { - imgOS = opts.Platform.OS - } - if err := dimage.CheckOS(imgOS); err != nil { - return nil, nil, err + if err := dimage.CheckOS(opts.Platform.OS); err != nil { + return nil, nil, err + } } return nil, &rolayer{ - key: "", c: i.client, snapshotter: i.snapshotter, - diffID: "", }, nil } diff --git a/daemon/images/image_builder.go b/daemon/images/image_builder.go index ab1072c85f..458b00db31 100644 --- a/daemon/images/image_builder.go +++ b/daemon/images/image_builder.go @@ -2,6 +2,7 @@ package images // import "github.com/docker/docker/daemon/images" import ( "context" + "fmt" "io" "runtime" @@ -199,16 +200,14 @@ Please notify the image author to correct the configuration.`, // Every call to GetImageAndReleasableLayer MUST call releasableLayer.Release() to prevent // leaking of layers. func (i *ImageService) GetImageAndReleasableLayer(ctx context.Context, refOrID string, opts backend.GetImageAndLayerOptions) (builder.Image, builder.ROLayer, error) { - if refOrID == "" { // ie FROM scratch - os := runtime.GOOS + if refOrID == "" { // FROM scratch if runtime.GOOS == "windows" { - os = "linux" + return nil, nil, fmt.Errorf(`"FROM scratch" is not supported on Windows`) } if opts.Platform != nil { - os = opts.Platform.OS - } - if err := image.CheckOS(os); err != nil { - return nil, nil, err + if err := image.CheckOS(opts.Platform.OS); err != nil { + return nil, nil, err + } } lyr, err := newROLayerForImage(nil, i.layerStore) return nil, lyr, err