Browse code

Don't env-var evaluate labels from docker build cmd line

Fixes #26027

Signed-off-by: Doug Davis <dug@us.ibm.com>

Doug Davis authored on 2016/10/06 10:15:46
Showing 2 changed files
... ...
@@ -229,7 +229,7 @@ func (b *Builder) build(stdout io.Writer, stderr io.Writer, out io.Writer) (stri
229 229
 	if len(b.options.Labels) > 0 {
230 230
 		line := "LABEL "
231 231
 		for k, v := range b.options.Labels {
232
-			line += fmt.Sprintf("%q=%q ", k, v)
232
+			line += fmt.Sprintf("%q='%s' ", k, v)
233 233
 		}
234 234
 		_, node, err := parser.ParseLine(line, &b.directive)
235 235
 		if err != nil {
... ...
@@ -6638,6 +6638,19 @@ func (s *DockerSuite) TestBuildLabelsOverride(c *check.C) {
6638 6638
 		c.Fatalf("Labels %s, expected %s", res, expected)
6639 6639
 	}
6640 6640
 
6641
+	// Command line option labels with env var
6642
+	name = "scratchz"
6643
+	expected = `{"bar":"$PATH"}`
6644
+	_, err = buildImage(name,
6645
+		`FROM scratch`,
6646
+		true, "--label", "bar=$PATH")
6647
+	c.Assert(err, check.IsNil)
6648
+
6649
+	res = inspectFieldJSON(c, name, "Config.Labels")
6650
+	if res != expected {
6651
+		c.Fatalf("Labels %s, expected %s", res, expected)
6652
+	}
6653
+
6641 6654
 }
6642 6655
 
6643 6656
 // Test case for #22855