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

Pau*_*ane 5 docker docker-swarm docker-networking

我有容器在一个覆盖 docker 网络上连接在一起的一组服务(每个服务在不同的 docker 机器上)中运行。

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

谢谢

hic*_*amx 8

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

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

然后在每个容器中,您必须安装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
Run Code Online (Sandbox Code Playgroud)


viv*_*d4v 5

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

    $ docker network ls | grep overlay

  2. 做个检查——

    docker inspect $NETWORK_NAME

您将能够找到分配给它们的容器名称和 IP。您可以从检查输出中获取/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": ""
        },
Run Code Online (Sandbox Code Playgroud)