Przeglądaj źródła

Merge pull request #32236 from tonistiigi/fix-cmd-shell

builder: Fix setting command with custom shell
Sebastiaan van Stijn 8 lat temu
rodzic
commit
05cd8bec32

+ 2 - 2
builder/dockerfile/dispatchers.go

@@ -827,7 +827,7 @@ func errTooManyArguments(command string) error {
 // shell-form of RUN, ENTRYPOINT and CMD instructions
 func getShell(c *container.Config) []string {
 	if 0 == len(c.Shell) {
-		return defaultShell[:]
+		return append([]string{}, defaultShell[:]...)
 	}
-	return c.Shell[:]
+	return append([]string{}, c.Shell[:]...)
 }

+ 15 - 0
integration-cli/docker_cli_build_test.go

@@ -6039,3 +6039,18 @@ func (s *DockerSuite) TestBuildLineErrorWithComments(c *check.C) {
 		Err:      "Dockerfile parse error line 5: Unknown instruction: NOINSTRUCTION",
 	})
 }
+
+// #31957
+func (s *DockerSuite) TestBuildSetCommandWithDefinedShell(c *check.C) {
+	buildImageSuccessfully(c, "build1", build.WithDockerfile(`
+FROM busybox
+SHELL ["/bin/sh", "-c"]
+`))
+	buildImageSuccessfully(c, "build2", build.WithDockerfile(`
+FROM build1
+CMD echo foo
+`))
+
+	out, _ := dockerCmd(c, "inspect", "--format", "{{ json .Config.Cmd }}", "build2")
+	c.Assert(strings.TrimSpace(out), checker.Equals, `["/bin/sh","-c","echo foo"]`)
+}