如何列出用户定义的 docker 网络中的所有容器?
Posted
技术标签:
【中文标题】如何列出用户定义的 docker 网络中的所有容器?【英文标题】:How do I list all containers in a user-defined docker network? 【发布时间】:2017-11-27 05:31:44 【问题描述】:如何获取用户定义的 docker 网络中所有容器的列表?
我想获取特定用户定义的 docker 网络的每个容器的所有提交哈希。
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】:您可以列出所有网络:
docker network ls
并检查一个网络以查看其主机(容器)
docker network inspect <network-id>
检查一个容器,你可以看到它连接到哪个网络:
docker inspect <container-id>
文档中的更多信息:https://docs.docker.com/engine/userguide/networking/work-with-networks/#create-networks
【讨论】:
我发现当一个容器被启动时具有 network_mode: "service:另一种使用纯 bash 而不使用 python 的方式 - 对我来说更容易记住
docker network inspect YOUR_NETWORK_ID | grep Name | tail -n +2 | cut -d':' -f2 | tr -d ',"'
样本输出
container1
container2
【讨论】:
【参考方案4】:解决方案也可以很简单,如下所示。仅列出容器名称
docker网络检查网络ID | grep "名称" | awk -F":" '打印 $2' | tr -d ',"'
【讨论】:
【参考方案5】:这是我使用 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']
【讨论】:
【参考方案6】:使用自定义网络列出容器名称的简单命令是:
docker inspect network-name | grep Name
此命令将列出网络名称和与其连接的容器,如下所示:
"Name": "network-name",
"Name": "Container1",
"Name": "Container2",
【讨论】:
【参考方案7】:我发现当一个容器被带出一个属性时
network_mode: "service: <some service name>"
'docker inspect' 或 'docker network inspect' 命令不会为您提供上述详细信息。
您将看到的是这样的:
"NetworkMode": "container: <some container id representing the service>"
【讨论】:
以上是关于如何列出用户定义的 docker 网络中的所有容器?的主要内容,如果未能解决你的问题,请参考以下文章
如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)