【发布时间】:2017-11-27 05:31:44
【问题描述】:
如何获取用户定义的 docker 网络中所有容器的列表?
我想获取特定用户定义的 docker 网络的每个容器的所有提交哈希。
【问题讨论】:
标签: docker networking containers
如何获取用户定义的 docker 网络中所有容器的列表?
我想获取特定用户定义的 docker 网络的每个容器的所有提交哈希。
【问题讨论】:
标签: docker networking containers
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
【讨论】:
您可以列出所有网络:
docker network ls
并检查一个网络以查看其主机(容器)
docker network inspect <network-id>
检查一个容器,你可以看到它连接到哪个网络:
docker inspect <container-id>
文档中的更多信息:https://docs.docker.com/engine/userguide/networking/work-with-networks/#create-networks
【讨论】:
另一种使用纯 bash 而不使用 python 的方式 - 对我来说更容易记住
docker network inspect YOUR_NETWORK_ID | grep Name | tail -n +2 | cut -d':' -f2 | tr -d ',"'
样本输出
container1
container2
【讨论】:
这是我使用 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']
【讨论】:
使用自定义网络列出容器名称的简单命令是:
docker inspect network-name | grep Name
此命令将列出网络名称和与其连接的容器,如下所示:
"Name": "network-name",
"Name": "Container1",
"Name": "Container2",
【讨论】:
我发现当一个容器被带出一个属性时
network_mode: "service: <some service name>"
'docker inspect' 或 'docker network inspect' 命令不会为您提供上述详细信息。
您将看到的是这样的:
"NetworkMode": "container: <some container id representing the service>"
【讨论】: