如何列出用户定义的Docker网络中的所有集装箱?

iecba09b  于 2023-03-01  发布在  Docker
关注(0)|答案(8)|浏览(93)

如何获得用户定义的码头网络中所有集装箱的列表?
我想得到一个特定的用户定义的码头网络的每个容器的所有提交哈希。

vc6uscn9

vc6uscn91#

docker network inspect \
  -f '{{ range $key, $value := .Containers }}{{ printf "%s\n" $key}}{{ end }}' \
  <network-id>

将给予属于network-id网络的容器散列的换行符分隔列表。
您可以调整printf以获得其他语法(逗号分隔、制表符分隔、容器ID+名称等)。

$ docker network inspect \
    -f '{{ range $key, $value := .Containers }}{{printf "%s: %s\n" $key .Name}}{{ end }}' \
    web-ingress
0b7f82ad7535ac7c1a454aaf0a5df6b87547d3cb9d751d0e0e1b4952a849b11b: mon_grafana.1.v5i0ea6nv12k0h3eo8egglg6n
1cce723642af2ce9382c7d46cca868d4674b4645d07458eeed9e928d29a4fb1f: mon_prometheus.1.lsfdcig6uhqfbbv7n07irpj3j
1f4840710f77fa1e02bd3e95581139b9f3c13fe4c857ce6ac44bfbdae4916920: mon_alertmanager.1.kwvw7kqsfpi9qzpmqdrd85yc7
2efea443fee41fd5dbca714145ca6ff95d91be9c60a469be597aadfaca90914d: mon_unsee.1.3lg8qgnvshibklnypzt5rw95s
6fdb893488f6e56766501e763d4c60196ae12a22ee9bd204d84fe324331714e8: mon_dashboard.1.r6b6nhatwmk88y5ncgagnaxh4
lb-web-ingress: web-ingress-endpoint
8ulbf1ek

8ulbf1ek2#

您可以列出所有网络:

docker network ls

并检查一个网络以查看其主机(容器)

docker network inspect <network-id>

检查容器,您可以看到它连接到哪个网络:

docker inspect <container-id>

更多信息请参见文档:https://docs.docker.com/engine/userguide/networking/work-with-networks/#create-networks

cnjp1d6j

cnjp1d6j3#

使用纯bash而不使用python的另一种方法-对我来说更容易记住

docker network inspect YOUR_NETWORK_ID | grep Name | tail -n +2 | cut -d':' -f2 | tr -d ',"'

样品输出

container1
container2
dvtswwa3

dvtswwa34#

使用自定义网络列出容器名称的简单命令是:

docker inspect network-name | grep Name

此命令将列出网络名称和连接到该网络的容器,如下所示:

"Name": "network-name",
        "Name": "Container1",
        "Name": "Container2",
mw3dktmi

mw3dktmi5#

解决办法也可以简单如下图。只列出集装箱名称

docker network inspect NETWORK ID | grep "Name" | awk -F":" '{print $2}' | tr -d ',"'

a0zr77ik

a0zr77ik6#

这是使用python's json parsing的bash命令

docker network inspect YOUR_NETWORK_ID \
    | python -c "import sys, json; print([v['Name'] for k,v in json.load(sys.stdin)[0]['Containers'].items()])"

样品输出

[u'container1', u'container2']
lskq00tm

lskq00tm7#

我发现当一个容器带有属性
network_mode: "service: <some service name>"
“docker inspect”或“docker network inspect”命令不会向您提供上述详细信息。
您将看到的内容如下所示:
"NetworkMode": "container: <some container id representing the service>"

w9apscun

w9apscun8#

请允许我介绍另一种获得结果的方法,仍然使用docker network inspect,但在数据检查和输出格式方面提供了其他可能性。
列出Docker的可用网络:

$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
a1682358dfa3   bridge        bridge    local
c6910d1da750   host          host      local
c9790e542025   none          null      local
9b265ecb4042   web_default   bridge    local

检查网络,输出为JSON,访问Containers对象并修饰JSON:

$ docker network inspect web_default -f '{{json .Containers}}' | python3 -m json.tool
{
    "5d05c2606b022b0c9bc480f138b8f8f0e382dca4b1decb1c27181a66e641803f": {
        "Name": "django",
        "EndpointID": "b6bf6b1dc5437f2359fb550368a5bc6529cd80fa5b9ece3c752eecef6627ea57",
        "MacAddress": "02:42:ac:12:00:03",
        "IPv4Address": "172.18.0.3/16",
        "IPv6Address": ""
    },
    "b971715bd0b3560831b03e86bcf2151ed04a60a46ad90b24f1f2265617360344": {
        "Name": "postgres",
        "EndpointID": "5883f465e235c66327271c1dfd05372f02012efa78928dd447c5444b0468647c",
        "MacAddress": "02:42:ac:12:00:02",
        "IPv4Address": "172.18.0.2/16",
        "IPv6Address": ""
    }
}

您甚至可以将命令输出重定向到,以便进一步检查:

$ docker network inspect web_default -f '{{json .Containers}}' | python3 -m json.tool > web_default_containers.json

相关问题