如何将 `docker ps` 命令格式化为字典列表

How to format `docker ps` command into a list of dictionaries

当我发出以下命令时

docker ps --no-trunc --format '{"name":"{{.Names}}", "status":"{{.Status}}"}'

我得到如下输出:

{"name": "container1", "status": "Up 10 hours"}
{"name": "container2", "status": "Up 10 hours"}

这些行中的每一行都是一个有效的 JSON 对象,但我很懒,希望整个输出是一个有效的 JSON,它表示字典列表:

[
{"name": "container1", "status": "Up 10 hours"},
{"name": "container2", "status": "Up 10 hours"}
]

有没有办法让 docker ps 命令以那种格式输出?

最简单的方法是通过管道传输到 jq -s:

docker ps --no-trunc --format '{"name":"{{.Names}}", "status":"{{.Status}}"}' \
    | jq -s 

来自jq --help

-s               read (slurp) all inputs into an array; apply filter to it;

PS:如果您无论如何都要使用 jq,那么我建议改为使用以下命令:

docker ps --no-trunc --format '{{ json . }}' \
    | jq -s 'map({name:.Names,status:.Status})'

该命令将 json 序列化留给 Go 模板函数 json 而不是像您的示例中那样手动执行。这样做的好处是容器名称中有问题的字符(例如 unicode)不会破坏 json 输出。