我正在尝试从 cli 获取可用的 json docker,但是它似乎只会为单个项目生成 json,而不是整体的完整结果。
例如,运行docker container ls -a --format="{{ json .Names }}"会产生:
"hopeful_payne"
"trusting_turing"
"stupefied_morse"
"unruffled_noyce"
"pensive_fermi"
"objective_neumann"
"confident_bhaskara"
"unruffled_cray"
"epic_newton"
"boring_bartik"
"priceless_sinoussi"
"naughty_grothendieck"
"hardcore_bose"
"sad_jones"
"optimistic_napier"
"trusting_stallman"
"xenodochial_dijkstra"
"pedantic_cocks"
Run Code Online (Sandbox Code Playgroud)
上面的不是json。
理想情况下,如何生成 json 数组的结果?
我认为你不能只使用 docker 来做到这一点。
命令行的format功能是有效地获取每个输入行(每个容器一个)并对其应用 Go 模板。因此,您需要另一个工具将行聚合到 JSON 数组中。
实现目标的一种方法是使用优秀的jq工具:
docker container ls --format="{\"name\":\"{{.Names}}\"}" --all | jq --slurp
Run Code Online (Sandbox Code Playgroud)
这会将每个容器行生成为 JSON 字符串:{"name": "[VALUE]"},然后用于jq将它们放入 JSON 数组中。
直接在 bash 中执行此操作的一个挑战是 JSON 的限制,即列表中的最后一个元素不能以,. 因此,以下简单的 bash 脚本会生成无效的 JSON,您需要额外的逻辑来删除它(或者更好的是,不要添加最后一个):
docker container ls --format="{\"name\":\"{{.Names}}\"}" --all | jq --slurp
Run Code Online (Sandbox Code Playgroud)