У меня есть контейнеры, работающие в ройком стеке служб (на разных докер-машинах каждый), соединенных вместе в оверлейной сети докеров.
Как можно было бы получить все используемые IP-адреса в сети, связанные с их услугами или именем контейнера изнутри контейнера в этой сети?
Спасибо
Привет, Шей, к сожалению, нет ...


Найдите имя ИЛИ ID оверлейной сети -
$ docker network ls | grep overlay
Сделайте осмотр -
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": ""
},
Спасибо за ваш ответ. Я ищу способ сделать это из контейнера в сети ... Я обновляю свой пост, чтобы было понятнее.
Сначала найдите имя сети, которую использует ваш рой.
Затем запустите docker network inspect <NETWORK-NAME>. Это даст вам вывод JSON, в котором вы найдете объект с ключом «Контейнеры». Этот объект показывает все контейнеры в сети и их IP-адреса соответственно.
Спасибо за ваш ответ. Я ищу способ сделать это из контейнера в сети ... Я обновил свой пост, чтобы он был понятнее.
Предполагая, что вы используете конечную точку VIP по умолчанию, вы можете использовать DNS для разрешения IP-адресов службы. Вот пример использования dig для получения IP-адреса VIP и последующего получения IP-адресов отдельных контейнеров за этим VIP с помощью задач.
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
~~~
Если вы хотите выполнить эту команду изнутри контейнеров, сначала вам нужно смонтировать docker.sock для каждой службы (при условии, что докер установлен в контейнере)
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
привет, Пол, есть новости по этому поводу?