如何列出用户定义的 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: " 的属性 'docker inspect' 或 'docker network inspect' 命令不会为您提供上述详细信息。您将看到类似这样的内容: "NetworkMode": "container: "【参考方案3】:

另一种使用纯 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: &lt;some service name&gt;"

'docker inspect' 或 'docker network inspect' 命令不会为您提供上述详细信息。

您将看到的是这样的:

"NetworkMode": "container: &lt;some container id representing the service&gt;"

【讨论】:

以上是关于如何列出用户定义的 docker 网络中的所有容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)

你如何列出 docker 容器中的卷?

如何查看docker 里某个容器的的启动命令

如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)

如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)

Docker 数据管理与网络通信