Fix #29547
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
... | ... |
@@ -65,11 +65,10 @@ func merge(userConf, imageConf *containertypes.Config) error { |
65 | 65 |
if userConf.Labels == nil { |
66 | 66 |
userConf.Labels = map[string]string{} |
67 | 67 |
} |
68 |
- if imageConf.Labels != nil { |
|
69 |
- for l := range userConf.Labels { |
|
70 |
- imageConf.Labels[l] = userConf.Labels[l] |
|
68 |
+ for l, v := range imageConf.Labels { |
|
69 |
+ if _, ok := userConf.Labels[l]; !ok { |
|
70 |
+ userConf.Labels[l] = v |
|
71 | 71 |
} |
72 |
- userConf.Labels = imageConf.Labels |
|
73 | 72 |
} |
74 | 73 |
|
75 | 74 |
if len(userConf.Entrypoint) == 0 { |
... | ... |
@@ -142,3 +142,16 @@ func (s *DockerSuite) TestCommitChange(c *check.C) { |
142 | 142 |
} |
143 | 143 |
} |
144 | 144 |
} |
145 |
+ |
|
146 |
+func (s *DockerSuite) TestCommitChangeLabels(c *check.C) { |
|
147 |
+ dockerCmd(c, "run", "--name", "test", "--label", "some=label", "busybox", "true") |
|
148 |
+ |
|
149 |
+ imageID, _ := dockerCmd(c, "commit", |
|
150 |
+ "--change", "LABEL some=label2", |
|
151 |
+ "test", "test-commit") |
|
152 |
+ imageID = strings.TrimSpace(imageID) |
|
153 |
+ |
|
154 |
+ c.Assert(inspectField(c, imageID, "Config.Labels"), checker.Equals, "map[some:label2]") |
|
155 |
+ // check that container labels didn't change |
|
156 |
+ c.Assert(inspectField(c, "test", "Config.Labels"), checker.Equals, "map[some:label]") |
|
157 |
+} |