diff --git a/api/client/ps/custom.go b/api/client/ps/custom.go index 6070b2fe3a..1739fd12a6 100644 --- a/api/client/ps/custom.go +++ b/api/client/ps/custom.go @@ -62,7 +62,9 @@ func (c *containerContext) Image() string { return "" } if c.trunc { - return stringutils.Truncate(c.c.Image, 12) + if stringid.TruncateID(c.c.ImageID) == stringid.TruncateID(c.c.Image) { + return stringutils.Truncate(c.c.Image, 12) + } } return c.c.Image } diff --git a/api/client/ps/custom_test.go b/api/client/ps/custom_test.go index 5c80d9cdb6..c0b2eb2e1c 100644 --- a/api/client/ps/custom_test.go +++ b/api/client/ps/custom_test.go @@ -26,8 +26,26 @@ func TestContainerPsContext(t *testing.T) { {types.Container{ID: containerID}, false, containerID, idHeader, ctx.ID}, {types.Container{Names: []string{"/foobar_baz"}}, true, "foobar_baz", namesHeader, ctx.Names}, {types.Container{Image: "ubuntu"}, true, "ubuntu", imageHeader, ctx.Image}, - {types.Container{Image: "verylongimagename"}, true, "verylongimag", imageHeader, ctx.Image}, + {types.Container{Image: "verylongimagename"}, true, "verylongimagename", imageHeader, ctx.Image}, {types.Container{Image: "verylongimagename"}, false, "verylongimagename", imageHeader, ctx.Image}, + {types.Container{ + Image: "a5a665ff33eced1e0803148700880edab4", + ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5", + }, + true, + "a5a665ff33ec", + imageHeader, + ctx.Image, + }, + {types.Container{ + Image: "a5a665ff33eced1e0803148700880edab4", + ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5", + }, + false, + "a5a665ff33eced1e0803148700880edab4", + imageHeader, + ctx.Image, + }, {types.Container{Image: ""}, true, "", imageHeader, ctx.Image}, {types.Container{Command: "sh -c 'ls -la'"}, true, `"sh -c 'ls -la'"`, commandHeader, ctx.Command}, {types.Container{Created: unix}, true, time.Unix(unix, 0).String(), createdAtHeader, ctx.CreatedAt}, diff --git a/api/types/types.go b/api/types/types.go index 4c39a25e40..c2c7852217 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -127,6 +127,7 @@ type Container struct { ID string `json:"Id"` Names []string Image string + ImageID string Command string Created int64 Ports []Port diff --git a/daemon/list.go b/daemon/list.go index 75ec88de42..c54df28f07 100644 --- a/daemon/list.go +++ b/daemon/list.go @@ -288,8 +288,9 @@ func includeContainerInList(container *Container, ctx *listContext) iterationAct // transformContainer generates the container type expected by the docker ps command. func (daemon *Daemon) transformContainer(container *Container, ctx *listContext) (*types.Container, error) { newC := &types.Container{ - ID: container.ID, - Names: ctx.names[container.ID], + ID: container.ID, + Names: ctx.names[container.ID], + ImageID: container.ImageID, } img, err := daemon.Repositories().LookupImage(container.Config.Image) diff --git a/docs/reference/api/docker_remote_api.md b/docs/reference/api/docker_remote_api.md index a53f5dae76..0a3d9e48a0 100644 --- a/docs/reference/api/docker_remote_api.md +++ b/docs/reference/api/docker_remote_api.md @@ -89,6 +89,7 @@ list of DNS options to be used in the container. * `POST /build` now optionally takes a serialized map of build-time variables. * `GET /events` now includes a `timenano` field, in addition to the existing `time` field. * `GET /info` now lists engine version information. +* `GET /containers/json` will return `ImageID` of the image used by container. ### v1.20 API changes diff --git a/docs/reference/api/docker_remote_api_v1.21.md b/docs/reference/api/docker_remote_api_v1.21.md index 15c2aca927..4d8b3b90a1 100644 --- a/docs/reference/api/docker_remote_api_v1.21.md +++ b/docs/reference/api/docker_remote_api_v1.21.md @@ -47,6 +47,7 @@ List containers "Id": "8dfafdbc3a40", "Names":["/boring_feynman"], "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", "Command": "echo 1", "Created": 1367854155, "Status": "Exit 0", @@ -63,6 +64,7 @@ List containers "Id": "9cd87474be90", "Names":["/coolName"], "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", "Command": "echo 222222", "Created": 1367854155, "Status": "Exit 0", @@ -75,6 +77,7 @@ List containers "Id": "3176a2479c92", "Names":["/sleepy_dog"], "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", "Command": "echo 3333333333333333", "Created": 1367854154, "Status": "Exit 0", @@ -87,6 +90,7 @@ List containers "Id": "4cb07b47f9fb", "Names":["/running_cat"], "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", "Command": "echo 444444444444444444444444444444444", "Created": 1367854152, "Status": "Exit 0",