как передать докеризованные IP-адреса программ подключенных к нему оверлейных сетей

#docker #networking #overlay

#docker #сеть #наложение

Вопрос:

У меня есть три оверлейные сети, подключенные к контейнеру в рое, и мне нужно указать адреса разных сетей программе, запущенной внутри, когда появляется контейнер. Каждая сеть предназначена для разных целей, и, похоже, я не могу идентифицировать их в контейнере.

Я пробовал обычный IP a и hostname -i , но он отображает только информацию об адаптере и ничего не указывает на то, какой оверлей находится на каком адаптере.

 lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

eth3@if118: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0e:03 brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet 10.0.14.3/24 brd 10.0.14.255 scope global eth3
       valid_lft forever preferred_lft forever

eth4@if120: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 4
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth4
       valid_lft forever preferred_lft forever

eth0@if122: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:ff:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.255.0.13/16 brd 10.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever

eth1@if124: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0d:03 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 10.0.13.3/24 brd 10.0.13.255 scope global eth1
       valid_lft forever preferred_lft forever

eth2@if126: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether 02:42:0a:00:0f:03 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet 10.0.15.3/24 brd 10.0.15.255 scope global eth2
       valid_lft forever preferred_lft forever
  
 hostname -i
10.0.14.3 10.0.13.3 10.0.15.3
  

Это показывает адреса, но ничего не говорит о том, какой из них является оверлеем. Любые указатели будут оценены.

Ответ №1:

  1. Вы могли бы написать скрипт, который запускается на хосте при запуске службы swarm. Скрипт запустит docker inspect в вашем контейнере и запишет сетевую информацию в файл. Файл будет сохранен в точке монтирования, смонтированной контейнером. Затем вы можете прочитать информацию из этого файла из контейнера.

  2. Более сложным решением было бы создать пользовательский API, который запускал бы для вас проверку docker и возвращал информацию о сети в ответе.

  3. Оверлейные сети, вероятно, назначаются интерфейсам по порядку. Небольшое тестирование показывает, что это правда, но я не люблю полагаться на предположения.

Комментарии:

1. что мы решили сделать, так это присвоить адреса обратной связи и обойти всю проблему. спасибо за совет!