如何将 `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 输出。
当我发出以下命令时
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 输出。