【问题标题】:How do I list all containers in a user-defined docker network?如何列出用户定义的 docker 网络中的所有容器?
【发布时间】:2017-11-27 05:31:44
【问题描述】:

如何获取用户定义的 docker 网络中所有容器的列表?

我想获取特定用户定义的 docker 网络的每个容器的所有提交哈希。

【问题讨论】:

    标签: docker networking containers


    【解决方案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;"

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-02
                • 2021-03-07
                • 2017-10-09
                • 1970-01-01
                • 1970-01-01
                • 2020-10-02
                相关资源
                最近更新 更多