Skip to content

include platform and creation date listing image #12856

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 2, 2025

Conversation

ndeloof
Copy link
Contributor

@ndeloof ndeloof commented May 21, 2025

What I did
Added PLATFORM and CREATED columns in docker compose images output

decoupled from getImageSummaries used by lifecycle methods, as having a ImageSummary#ContainerName attribute is confusing

$ docker compose images
CONTAINER           REPOSITORY          TAG                 PLATFORM            IMAGE ID            SIZE                CREATED
truc-hello-1        truc-hello          latest              linux/arm64         00dd0d06b496        87.9MB              2 hours ago

Related issue

(not mandatory) A picture of a cute animal, if possible in relation to what you did

@ndeloof ndeloof requested a review from a team as a code owner May 21, 2025 09:22
@ndeloof ndeloof requested a review from glours May 21, 2025 09:22
@thaJeztah
Copy link
Member

Slightly wondering about the PLATFORM here - what does the IMAGE ID refer to? Is that referring to the variant of the image? Considering multi-platform images and such.

cc @vvoland

@thaJeztah
Copy link
Member

wondering if it would make more sense to show a platform column for the list of containers; something we'll be adding as an optional column for docker ps; see docker/cli#6042

@ndeloof
Copy link
Contributor Author

ndeloof commented May 21, 2025

IMAGE ID is the one returned by ImageInspect

@thaJeztah
Copy link
Member

Yeah, so by default, docker image inspect show the ID of the manifest-index;

docker image inspect --format '{{.ID}}' alpine
sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c

docker buildx imagetools inspect alpine | head -n3
Name:      docker.io/library/alpine:latest
MediaType: application/vnd.oci.image.index.v1+json
Digest:    sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c

docker image ls --tree
IMAGE                   ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:latest           a8560b36e8b8         25MB         7.64MB
├─ linux/amd64          1c4eef651f65       12.1MB         3.64MB
├─ linux/arm/v6         903bfe2ae994           0B             0B
├─ linux/arm/v7         9c2d245b3c01           0B             0B
├─ linux/arm64/v8       757d680068d7       12.8MB         3.99MB
├─ linux/386            2436f2b3b7d2           0B             0B
├─ linux/ppc64le        9ed53fd3b831           0B             0B
├─ linux/riscv64        1de5eb4a9a67           0B             0B
└─ linux/s390x          fe0dcdd1f783           0B             0B

So, technically adding a platform to that is not correct, as the platform would be for the image manifests underneath; using docker image inspect and specifying a platform will show a different ID for that reason;

docker image inspect --platform=linux/amd64 --format '{{.ID}}' alpine
sha256:1c4eef651f65e2f7daee7ee785882ac164b02b78fb74503052a26dc061c90474

docker buildx imagetools inspect alpine | grep -A3 1c4eef651f65e2f7daee7ee785882ac164b02b78fb74503052a26dc061c90474 | head -n3
  Name:        docker.io/library/alpine:latest@sha256:1c4eef651f65e2f7daee7ee785882ac164b02b78fb74503052a26dc061c90474
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/amd64

docker image inspect --platform=linux/arm64 --format '{{.ID}}' alpine
sha256:757d680068d77be46fd1ea20fb21db16f150468c5e7079a08a2e4705aec096ac

docker buildx imagetools inspect alpine | grep -A3 757d680068d77be46fd1ea20fb21db16f150468c5e7079a08a2e4705aec096ac | head -n3
  Name:        docker.io/library/alpine:latest@sha256:757d680068d77be46fd1ea20fb21db16f150468c5e7079a08a2e4705aec096ac
  MediaType:   application/vnd.oci.image.manifest.v1+json
  Platform:    linux/arm64/v8

@ndeloof
Copy link
Contributor Author

ndeloof commented May 21, 2025

docker image inspect show the ID of the manifest-index

not when ran with --platform, which is what we show here as image ID

$ docker compose images
CONTAINER            REPOSITORY          TAG                 PLATFORM            IMAGE ID            SIZE                CREATED
truc-hello-amd64-1   debian              latest              linux/amd64         6bc30d909583        48.5MB              4 minutes ago
truc-hello-arm64-1   debian              latest              linux/arm64/v8      f245326d62b3        48.3MB              4 minutes ago

@thaJeztah
Copy link
Member

Right, but neither 6bc30d909583 nor f245326d62b3 are tagged as debian:latest - the manifest index is tagged, and the underlying images are not.

That's basically the reason why we opted not to show platform in docker image ls, and only show it with the --tree view

@ndeloof
Copy link
Contributor Author

ndeloof commented May 21, 2025

ok, fixed to only display the top-level tagged image ID

$ docker compose images
CONTAINER            REPOSITORY          TAG                 PLATFORM            IMAGE ID            SIZE                CREATED
truc-hello-amd64-1   debian              latest              linux/amd64         264982ff4d18        48.5MB              32 minutes ago
truc-hello-arm64-1   debian              latest              linux/arm64/v8      264982ff4d18        48.3MB              32 minutes ago

Maybe you should close moby/moby#49995 if there's no plan to support this ?

@ndeloof ndeloof force-pushed the images_pf branch 4 times, most recently from 274b7e6 to e5b742a Compare May 21, 2025 17:26
Copy link
Contributor

@glours glours left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM and tests ok 👍

@glours glours merged commit eb3074b into docker:main Jun 2, 2025
26 checks passed
@ndeloof ndeloof deleted the images_pf branch June 2, 2025 17:03
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jun 12, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker/compose](https://github.com/docker/compose) | minor | `v2.36.2` -> `v2.37.1` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>docker/compose (docker/compose)</summary>

### [`v2.37.1`](https://github.com/docker/compose/releases/tag/v2.37.1)

[Compare Source](docker/compose@v2.37.0...v2.37.1)

#### What's Changed

##### ✨ Improvements

-   Add support for extra_hosts building with bake by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12935

##### 🐛 Fixes

-   Fix SIGSEGV on Enable Watch by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12909
-   Revert docker compose images JSON output to array format by [@&#8203;x0rw](https://github.com/x0rw) in docker/compose#12917
-   Sanitize service name so they can be used as bake targets by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12925
-   Only look for required image in bake metadata by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12930
-   Don't create metadatafile, just generate a random name by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12931
-   Fix the generated manifest for compose artifacts by [@&#8203;jcarter3](https://github.com/jcarter3) in docker/compose#12933
-   Fix support for additional_contexts with service sub-dependencies by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12936
-   Fix panic on failure starting plugin server by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12914

##### 🔧  Internal

-   Do not forget to remove the bake metadata file by [@&#8203;glours](https://github.com/glours) in docker/compose#12912

##### ⚙️ Dependencies

-   Bump golang.org/x/sync v0.15.0 by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12913
-   Build(deps): bump google.golang.org/grpc from 1.72.2 to 1.73.0 by [@&#8203;dependabot](https://github.com/dependabot) in docker/compose#12910

#### New Contributors

-   [@&#8203;x0rw](https://github.com/x0rw) made their first contribution in docker/compose#12917
-   [@&#8203;jcarter3](https://github.com/jcarter3) made their first contribution in docker/compose#12933

**Full Changelog**: docker/compose@v2.37.0...v2.37.1

### [`v2.37.0`](https://github.com/docker/compose/releases/tag/v2.37.0)

[Compare Source](docker/compose@v2.36.2...v2.37.0)

#### What's Changed

ℹ️ `bake` is now used as the default images builder, if you don't want to use it you could opt-out by setting the `COMPOSE_BAKE` env variable to `false`

##### ✨ Improvements

-   Add compose bridge by [@&#8203;glours](https://github.com/glours) in docker/compose#12866
-   Include platform and creation date listing image by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12856
-   Add support of metadata subcommand for provider services by [@&#8203;glours](https://github.com/glours) in docker/compose#12903
-   Use bake by default by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12699

##### 🐛 Fixes

-   (Re)start dependent services after watch rebuilt image by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12879
-   Resolve symlinks while making dockerfile path absolute by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12884
-   Fix support for `BUILDKIT_PROGRESS` by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12894
-   Build dependent service images when required by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12896
-   Fix recreate network (and connected containers) on config updates by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12899
-   `pull` does not require `env_file` being resolved by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12904

##### 🔧  Internal

-   Refactor: use slices.Contains to simplify code by [@&#8203;tongjicoder](https://github.com/tongjicoder) in docker/compose#12877
-   Remove utils.Contains to prefer slice.ContainsFunc by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12878
-   Fix typo in suggestion log by [@&#8203;Carlos-err406](https://github.com/Carlos-err406) in docker/compose#12893
-   Replace uses of golang.org/x/exp/(maps|slices) for stdlib and fix linting by [@&#8203;thaJeztah](https://github.com/thaJeztah) in docker/compose#12885
-   Debug message to help diagnose platform mismatch by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12905
-   (refactoting) Move watch logic into a dedicated Watcher type by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#12865

##### ⚙️ Dependencies

-   Bump cli-doc-tools to v0.10.0 by [@&#8203;glours](https://github.com/glours) in docker/compose#12855
-   Bump github.com/docker/docker, docker/cli v28.2.2 by [@&#8203;thaJeztah](https://github.com/thaJeztah) in docker/compose#12875
-   Build(deps): bump google.golang.org/grpc from 1.72.1 to 1.72.2 by [@&#8203;dependabot](https://github.com/dependabot) in docker/compose#12872

#### New Contributors

-   [@&#8203;tongjicoder](https://github.com/tongjicoder) made their first contribution in docker/compose#12877
-   [@&#8203;Carlos-err406](https://github.com/Carlos-err406) made their first contribution in docker/compose#12893

**Full Changelog**: docker/compose@v2.36.2...v2.37.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC41MC4wIiwidXBkYXRlZEluVmVyIjoiNDAuNTAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants