如何列出网络;使用格式模板附加 docker 容器?

muh*_*mad 3 go go-templates docker

当我想检查桥驱动程序连接到的容器列表时,我执行以下操作,

docker network inspect br01 --format='{{range .Containers}}{{println .Name}}{{end}}'
Run Code Online (Sandbox Code Playgroud)

给出以下输出,

network-test01
network-test02
network-test03
Run Code Online (Sandbox Code Playgroud)

但是如何做同样的事情来列出容器连接到的网络驱动程序呢?

以下是 docker 检查,

.....
            "Networks": {
                "br01": {
                    "IPAMConfig": {},
                    "Links": null,
                    ........
                },
                "bridge": {
                    "IPAMConfig": null,
                    .....
                }
.....
Run Code Online (Sandbox Code Playgroud)

我只想列出如下网络,

br01
bridge
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下方法,但由于我对 go 模板的了解有限,无法正确使用该模板。

docker inspect network-test01 --format "{{.NetworkSettings.Networks}}"
Run Code Online (Sandbox Code Playgroud)

结果如下,

map[br01:0xc0000f6180 bridge:0xc0000f6cc0]
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 5

以下模板将仅输出网络名称:

{{range $k, $v := .NetworkSettings.Networks}}{{println $k}}{{end}}
Run Code Online (Sandbox Code Playgroud)

测试它的 Go 代码示例:

m := map[string]interface{}{
    "NetworkSettings": map[string]interface{}{
        "Networks": map[string]interface{}{
            "br1":    struct{}{},
            "bridge": struct{}{},
        },
    },
}

t := template.Must(template.New("").Parse("{{range $k, $v := .NetworkSettings.Networks}}{{println $k}}{{end}}"))

if err := t.Execute(os.Stdout, m); err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

哪个输出(在Go Playground上尝试):

br1
bridge
Run Code Online (Sandbox Code Playgroud)

因此使用以下命令:

docker inspect network-test01 --format '{{range $k, $v := .NetworkSettings.Networks}}{{println $k}}{{end}}'
Run Code Online (Sandbox Code Playgroud)

另请注意,该docker命令还将在每个项目后输出换行符,因此println可以省略调用:

docker inspect network-test01 --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}{{end}}'
Run Code Online (Sandbox Code Playgroud)