Browse code

builder: Fix CMD to inject /bin/sh -c when provided with a non-json value.

Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)

Erik Hollensbe authored on 2014/09/30 02:23:10
Showing 2 changed files
... ...
@@ -234,7 +234,7 @@ func cmd(b *Builder, args []string, attributes map[string]bool) error {
234 234
 	b.Config.Cmd = handleJsonArgs(args, attributes)
235 235
 
236 236
 	if !attributes["json"] && len(b.Config.Entrypoint) == 0 {
237
-		b.Config.Entrypoint = []string{"/bin/sh", "-c"}
237
+		b.Config.Cmd = append([]string{"/bin/sh", "-c"}, b.Config.Cmd...)
238 238
 	}
239 239
 
240 240
 	if err := b.commit("", b.Config.Cmd, fmt.Sprintf("CMD %v", b.Config.Cmd)); err != nil {
... ...
@@ -2250,3 +2250,45 @@ func TestBuildInvalidTag(t *testing.T) {
2250 2250
 	}
2251 2251
 	logDone("build - invalid tag")
2252 2252
 }
2253
+
2254
+func TestBuildCmdShDashC(t *testing.T) {
2255
+	name := "testbuildcmdshc"
2256
+	defer deleteImages(name)
2257
+	if _, err := buildImage(name, "FROM busybox\nCMD echo cmd\n", true); err != nil {
2258
+		t.Fatal(err)
2259
+	}
2260
+
2261
+	res, err := inspectFieldJSON(name, "Config.Cmd")
2262
+	if err != nil {
2263
+		t.Fatal(err, res)
2264
+	}
2265
+
2266
+	expected := `["/bin/sh","-c","echo cmd"]`
2267
+
2268
+	if res != expected {
2269
+		t.Fatalf("Expected value %s not in Config.Cmd: %s", expected, res)
2270
+	}
2271
+
2272
+	logDone("build - cmd should have sh -c for non-json")
2273
+}
2274
+
2275
+func TestBuildCmdJSONNoShDashC(t *testing.T) {
2276
+	name := "testbuildcmdjson"
2277
+	defer deleteImages(name)
2278
+	if _, err := buildImage(name, "FROM busybox\nCMD [\"echo\", \"cmd\"]", true); err != nil {
2279
+		t.Fatal(err)
2280
+	}
2281
+
2282
+	res, err := inspectFieldJSON(name, "Config.Cmd")
2283
+	if err != nil {
2284
+		t.Fatal(err, res)
2285
+	}
2286
+
2287
+	expected := `["echo","cmd"]`
2288
+
2289
+	if res != expected {
2290
+		t.Fatalf("Expected value %s not in Config.Cmd: %s", expected, res)
2291
+	}
2292
+
2293
+	logDone("build - cmd should not have /bin/sh -c for json")
2294
+}