我有这样的命令:
$ docker inspect reacthublh_mysql_1 -f "{{json .NetworkSettings.Networks }}"
Run Code Online (Sandbox Code Playgroud)
为我提取的输出:
{"reacthublh-network":{"IPAMConfig":null,"Links":null,"Aliases":["1b905711e127","mysql"],"NetworkID":"d2b6bd4815a2eb48a57d05e5d219894f453c15e3f8b5a331a5f0668ed98f4730","EndpointID":"c71240571cc1cfb7bd50119aaf6aaef3dfbc2dc56732e0fd6f593ebe00861edc","Gateway":"172.30.0.1","IPAddress":"172.30.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:1e:00:02","DriverOpts":null}}
Run Code Online (Sandbox Code Playgroud)
问题是如何仅提取作为 json 对象的第一个键的reacthublh-network?
更新:
我现在找到的唯一方法是:
$ docker inspect reacthublh_mysql_1 -f "{{json .NetworkSettings.Networks }}" | cut -d '"' -f2
Run Code Online (Sandbox Code Playgroud)
它输出的正是我需要的,但我很好奇是否仍然可以在 --format 参数中执行它
该docker inspect -f选项使用 Go文本/模板语言,扩展很少。我认为不能直接只打印第一个网络名称,但可以打印出所有网络名称而没有其他详细信息。这里的技巧是将该Networks对象作为映射迭代并打印出键:
docker inspect jolly_hodgkin \
-f '{{range $k, $v := .NetworkSettings.Networks}}{{printf "%s\n" $k}}{{end}}'
Run Code Online (Sandbox Code Playgroud)
如果您有一个专门构建的用于 JSON 操作的命令行工具(如jq),它的查询语言可能更强大,更适合您需要的数据操作。一个jq专门获取第一个 Docker 网络名称的调用可能看起来像
docker inspect jolly_hodgkin \
| jq -r '.[].NetworkSettings.Networks | keys | first'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |