diff --git a/docs/sources/reference/api/docker_remote_api_v1.19.md b/docs/sources/reference/api/docker_remote_api_v1.19.md index d6399b8fbd..6ac6f33de5 100644 --- a/docs/sources/reference/api/docker_remote_api_v1.19.md +++ b/docs/sources/reference/api/docker_remote_api_v1.19.md @@ -1752,6 +1752,10 @@ Create a new image from a container's changes "Volumes": { "/tmp": {} }, + "Labels": { + "key1": "value1", + "key2": "value2" + }, "WorkingDir": "", "NetworkDisabled": false, "ExposedPorts": { diff --git a/docs/sources/reference/api/docker_remote_api_v1.20.md b/docs/sources/reference/api/docker_remote_api_v1.20.md index c3a42410dd..82739d6294 100644 --- a/docs/sources/reference/api/docker_remote_api_v1.20.md +++ b/docs/sources/reference/api/docker_remote_api_v1.20.md @@ -1743,6 +1743,10 @@ Create a new image from a container's changes "Volumes": { "/tmp": {} }, + "Labels": { + "key1": "value1", + "key2": "value2" + }, "WorkingDir": "", "NetworkDisabled": false, "ExposedPorts": { diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index 8bdc13b6d7..d7bf9e97f9 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -725,6 +725,57 @@ func (s *DockerSuite) TestContainerApiCommit(c *check.C) { } } +func (s *DockerSuite) TestContainerApiCommitWithLabelInConfig(c *check.C) { + cName := "testapicommitwithconfig" + out, err := exec.Command(dockerBinary, "run", "--name="+cName, "busybox", "/bin/sh", "-c", "touch /test").CombinedOutput() + if err != nil { + c.Fatal(err, out) + } + + config := map[string]interface{}{ + "Labels": map[string]string{"key1": "value1", "key2": "value2"}, + } + + name := "TestContainerApiCommitWithConfig" + status, b, err := sockRequest("POST", "/commit?repo="+name+"&container="+cName, config) + c.Assert(status, check.Equals, http.StatusCreated) + c.Assert(err, check.IsNil) + + type resp struct { + Id string + } + var img resp + if err := json.Unmarshal(b, &img); err != nil { + c.Fatal(err) + } + + label1, err := inspectFieldMap(img.Id, "Config.Labels", "key1") + if err != nil { + c.Fatal(err) + } + c.Assert(label1, check.Equals, "value1") + + label2, err := inspectFieldMap(img.Id, "Config.Labels", "key2") + if err != nil { + c.Fatal(err) + } + c.Assert(label2, check.Equals, "value2") + + cmd, err := inspectField(img.Id, "Config.Cmd") + if err != nil { + c.Fatal(err) + } + if cmd != "{[/bin/sh -c touch /test]}" { + c.Fatalf("got wrong Cmd from commit: %q", cmd) + } + + // sanity check, make sure the image is what we think it is + out, err = exec.Command(dockerBinary, "run", img.Id, "ls", "/test").CombinedOutput() + if err != nil { + c.Fatalf("error checking committed image: %v - %q", err, string(out)) + } +} + func (s *DockerSuite) TestContainerApiCreate(c *check.C) { config := map[string]interface{}{ "Image": "busybox",