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



当我发出以下命令

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 

Fromjq --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输出。

最新更新