如何在docker网络上获取所有IP地址?

时间:2018-03-23 09:23:38

标签: docker docker-swarm docker-networking

我有一个容器在一堆服务(在不同的docker-machines上)运行,这些服务连接在一个覆盖的docker网络上。

如何在网络上的容器内部获取与其服务或容器名称相关联的网络上所有已使用过的ip地址?

谢谢

4 个答案:

答案 0 :(得分:2)

如果要从容器内执行此命令,首先必须为每个服务安装docker.sock(假设docker已安装在容器中)

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

然后在每个容器中,您必须安装jq,之后您只需运行docker network inspect <network_name_here> | jq -r 'map(.Containers[].IPv4Address) []'预期输出,例如:

172.21.0.2/16
172.21.0.5/16
172.21.0.4/16
172.21.0.3/16

答案 1 :(得分:1)

假设您使用的是默认VIP端点,则可以使用DNS来解析服务的IP。以下是使用dig获取VIP IP的示例,然后使用任务获取该VIP后面的单个容器IP。

docker network create --driver overlay --attachable sweet

docker service create --name nginx --replicas=5 --network sweet nginx

docker container run --network sweet -it bretfisher/netshoot dig nginx
~~~
;; ANSWER SECTION:
nginx.          600 IN  A   10.0.0.3
~~~

docker container run --network sweet -it bretfisher/netshoot dig tasks.nginx
~~~
;; ANSWER SECTION:
tasks.nginx.        600 IN  A   10.0.0.5
tasks.nginx.        600 IN  A   10.0.0.8
tasks.nginx.        600 IN  A   10.0.0.7
tasks.nginx.        600 IN  A   10.0.0.6
tasks.nginx.        600 IN  A   10.0.0.4
~~~

答案 2 :(得分:0)

  1. 找到覆盖网络的名称或ID -

    $ docker network ls | grep overlay

  2. 进行检查 -

    docker inspect $NETWORK_NAME

  3. 您将能够找到容器名称&amp;分配给他们的IP。您可以从inspect输出中获取/ grep所需的值。你会发现输出如下 -

        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.23.0.0/16",
                    "Gateway": "172.23.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "183584efd63af145490a9afb61eac5db994391ae94467b32086f1ece84ec0114": {
                "Name": "emailparser_lr_1",
                "EndpointID": "0a9d0958caf0fa454eb7dbe1568105bfaf1813471d466e10030db3f025121dd7",
                "MacAddress": "02:42:ac:17:00:04",
                "IPv4Address": "172.23.0.4/16",
                "IPv6Address": ""
            },
            "576cb03e753a987eb3f51a36d4113ffb60432937a2313873b8608c51006ae832": {
                "Name": "emailparser",
                "EndpointID": "833b5c940d547437c4c3e81493b8742b76a3b8644be86af92e5cdf90a7bb23bd",
                "MacAddress": "02:42:ac:17:00:02",
                "IPv4Address": "172.23.0.2/16",
                "IPv6Address": ""
            },
    

答案 3 :(得分:0)

首先,找到您的群组正在使用的网络名称。

然后运行docker network inspect <NETWORK-NAME>。这将为您提供JSON输出,您将在其中找到具有键“Containers”的对象。该对象分别显示网络中的所有容器及其IP地址。