Sfoglia il codice sorgente

Fix resetting image metadata between stages for scratch case

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Tonis Tiigi 8 anni fa
parent
commit
b192218503

+ 1 - 1
builder/dockerfile/dispatchers.go

@@ -8,6 +8,7 @@ package dockerfile
 // package.
 
 import (
+	"bytes"
 	"fmt"
 	"regexp"
 	"runtime"
@@ -16,7 +17,6 @@ import (
 	"strings"
 	"time"
 
-	"bytes"
 	"github.com/Sirupsen/logrus"
 	"github.com/docker/docker/api"
 	"github.com/docker/docker/api/types"

+ 2 - 0
builder/dockerfile/evaluator.go

@@ -219,6 +219,8 @@ func (s *dispatchState) beginStage(stageName string, image builder.Image) {
 
 	if image.RunConfig() != nil {
 		s.runConfig = image.RunConfig()
+	} else {
+		s.runConfig = &container.Config{}
 	}
 	s.baseImage = image
 	s.setDefaultPath()

+ 21 - 0
integration-cli/docker_cli_build_test.go

@@ -6202,6 +6202,27 @@ func (s *DockerSuite) TestBuildCopyFromWindowsIsCaseInsensitive(c *check.C) {
 	})
 }
 
+// #33176
+func (s *DockerSuite) TestBuildCopyFromResetScratch(c *check.C) {
+	testRequires(c, DaemonIsLinux)
+
+	dockerfile := `
+		FROM busybox
+		WORKDIR /foo/bar
+		FROM scratch
+		ENV FOO=bar
+		`
+	ctx := fakecontext.New(c, "",
+		fakecontext.WithDockerfile(dockerfile),
+	)
+	defer ctx.Close()
+
+	cli.BuildCmd(c, "build1", build.WithExternalBuildContext(ctx))
+
+	res := cli.InspectCmd(c, "build1", cli.Format(".Config.WorkingDir")).Combined()
+	c.Assert(strings.TrimSpace(res), checker.Equals, "")
+}
+
 func (s *DockerSuite) TestBuildIntermediateTarget(c *check.C) {
 	dockerfile := `
 		FROM busybox AS build-env