Browse Source

commit: do not change container labels on commit

Fix #29547

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Alexander Morozov 8 years ago
parent
commit
ca6c6f0765
2 changed files with 16 additions and 4 deletions
  1. 3 4
      daemon/commit.go
  2. 13 0
      integration-cli/docker_cli_commit_test.go

+ 3 - 4
daemon/commit.go

@@ -65,11 +65,10 @@ func merge(userConf, imageConf *containertypes.Config) error {
 	if userConf.Labels == nil {
 		userConf.Labels = map[string]string{}
 	}
-	if imageConf.Labels != nil {
-		for l := range userConf.Labels {
-			imageConf.Labels[l] = userConf.Labels[l]
+	for l, v := range imageConf.Labels {
+		if _, ok := userConf.Labels[l]; !ok {
+			userConf.Labels[l] = v
 		}
-		userConf.Labels = imageConf.Labels
 	}
 
 	if len(userConf.Entrypoint) == 0 {

+ 13 - 0
integration-cli/docker_cli_commit_test.go

@@ -142,3 +142,16 @@ func (s *DockerSuite) TestCommitChange(c *check.C) {
 		}
 	}
 }
+
+func (s *DockerSuite) TestCommitChangeLabels(c *check.C) {
+	dockerCmd(c, "run", "--name", "test", "--label", "some=label", "busybox", "true")
+
+	imageID, _ := dockerCmd(c, "commit",
+		"--change", "LABEL some=label2",
+		"test", "test-commit")
+	imageID = strings.TrimSpace(imageID)
+
+	c.Assert(inspectField(c, imageID, "Config.Labels"), checker.Equals, "map[some:label2]")
+	// check that container labels didn't change
+	c.Assert(inspectField(c, "test", "Config.Labels"), checker.Equals, "map[some:label]")
+}