Skip to content

[FEATURE REQUEST] Add GO templating capabilities to images and/or list commands #12948

Open
@leoperegrino

Description

@leoperegrino

Description

There are situations where I'd like to down all projects and this requires access to all project names in a machine readable format.
Given that several docker CLI/compose commands provide templating capabilities with the --format flag I'd expect to solve this with:

docker compose ls --format '{{.Name}}' | xargs -I{} docker compose -p {} down 

But docker compose ls --format <format> only offers json or table format therefore it's only possible to get project names using external applications.

If using table format you'd have to hack a shell pipeline.

docker compose ls | tail -n +2 | awk '{print $1}' | xargs -I{} docker compose -p {} down 

If using json format, even though json is machine readable, it requires you to pipe to a parser, such as jq, which very likely it's not available.

docker compose ls --format json | jq '.[].Name' | xargs -I{} docker compose -p {} down

The docker CLI and compose already provide GO Templates formatting for several commands such as:

  • docker ps --format <TEMPLATE>
  • docker images --format <TEMPLATE>
  • docker stats --format <TEMPLATE>
  • docker compose ps --format <TEMPLATE>

The list goes on.

In compose there is compose images and compose ls which not only are not able to handle Templates but they also print JSON in a different way than the ones that support Templates.
The commands that have support print each object as a separate JSON in a different line, while the ones that don't print a JSON list in a single line:

docker images --format json
# {"Containers":"N/A","CreatedAt":"2014-07-19 04:02:32 -0300 -03","CreatedSince":"10 years ago","Digest":"\u003cnone\u003e","ID":"350b164e7ae1","Repository":"gcr.io/google-containers/pause","SharedSize":"N/A","Size":"240kB","Tag":"latest","UniqueSize":"N/A","VirtualSize":"239.8kB"}
# {"Containers":"N/A","CreatedAt":"1979-12-31 21:00:00 -0300 -03","CreatedSince":"45 years ago","Digest":"\u003cnone\u003e","ID":"f576b2d0af25","Repository":"test","SharedSize":"N/A","Size":"2.06GB","Tag":"latest","UniqueSize":"N/A","VirtualSize":"2.056GB"}


docker compose images --format json
# [{"ID":"sha256:350b164e7ae1dcddeffadd65c76226c9b6dc5553f5179153fb0e36b78f2a5e06","ContainerName":"test_1-compose_test-1","Repository":"gcr.io/google-containers/pause","Tag":"latest","Size":239840,"LastTagTime":"0001-01-01T00:00:00Z"},{"ID":"sha256:350b164e7ae1dcddeffadd65c76226c9b6dc5553f5179153fb0e36b78f2a5e06","ContainerName":"test_1-compose_test_2-1","Repository":"gcr.io/google-containers/pause","Tag":"latest","Size":239840,"LastTagTime":"0001-01-01T00:00:00Z"}]

Implementing templating capabilities for these commands would change the output format but only to conform with already existing behavior.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions