Преглед на файлове

builder: Restore /bin/sh handling in CMD when entrypoint is specified with JSON

Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)
Erik Hollensbe преди 10 години
родител
ревизия
24545c18c3
променени са 2 файла, в които са добавени 35 реда и са изтрити 1 реда
  1. 1 1
      builder/dispatchers.go
  2. 34 0
      integration-cli/docker_cli_build_test.go

+ 1 - 1
builder/dispatchers.go

@@ -234,7 +234,7 @@ func run(b *Builder, args []string, attributes map[string]bool, original string)
 func cmd(b *Builder, args []string, attributes map[string]bool, original string) error {
 	b.Config.Cmd = handleJsonArgs(args, attributes)
 
-	if !attributes["json"] && len(b.Config.Entrypoint) == 0 {
+	if !attributes["json"] {
 		b.Config.Cmd = append([]string{"/bin/sh", "-c"}, b.Config.Cmd...)
 	}
 

+ 34 - 0
integration-cli/docker_cli_build_test.go

@@ -16,6 +16,40 @@ import (
 	"github.com/docker/docker/pkg/archive"
 )
 
+func TestBuildShCmdJSONEntrypoint(t *testing.T) {
+	name := "testbuildshcmdjsonentrypoint"
+	defer deleteImages(name)
+
+	_, err := buildImage(
+		name,
+		`
+    FROM busybox
+    ENTRYPOINT ["/bin/echo"]
+    CMD echo test
+    `,
+		true)
+
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	out, _, err := runCommandWithOutput(
+		exec.Command(
+			dockerBinary,
+			"run",
+			name))
+
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if strings.TrimSpace(out) != "/bin/sh -c echo test" {
+		t.Fatal("CMD did not contain /bin/sh -c")
+	}
+
+	logDone("build - CMD should always contain /bin/sh -c when specified without JSON")
+}
+
 func TestBuildEnvironmentReplacementUser(t *testing.T) {
 	name := "testbuildenvironmentreplacement"
 	defer deleteImages(name)