Разрешить связь через определенные порты между двумя контейнерами Docker в разных мостовых сетях.

Предисловие: этот вопрос аналогичен Разрешить связь между двумя докерами соединять сети с помощью docker-compose, но этому вопросу уже более 4 лет, поэтому я счел за лучшее задать новый вопрос.

У меня есть две сети bridge и два контейнера, по одному в каждой сети. Я пытаюсь понять, как сделать порт одного контейнера доступным для другого контейнера.

$ docker network create net1
$ docker network create net2

$ docker run -it -d --net=net1 --name container1 -p 1234:80 ....
$ docker run -it -d --net=net2 --name container2 -p 5678:80 ....

Теперь я хотел бы, чтобы container1 мог звонить container2:80 и container2:4321, но я не знаю, как это сделать.

Я пытаюсь сделать это без использования драйвера macvlan.


person IMTheNachoMan    schedule 30.12.2020    source источник
comment
Почему бы не использовать третью сеть и поставить туда оба контейнера?   -  person anemyte    schedule 30.12.2020
comment
Я хочу ограничить то, что может говорить каждый контейнер.   -  person IMTheNachoMan    schedule 30.12.2020


Ответы (1)


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

В моем случае, помимо подключения к пользовательской сети, я также подключаю контейнеры к сети bridge по умолчанию. Сеть по умолчанию не разрешает связь между контейнерами.

Затем в iptables я создаю новый конвейер и подключаю к нему docker0 (сеть bridge).

-F FILTERS
-A DOCKER-USER -i docker0 -o docker0 -j FILTERS

И разрешите номера портов из белого списка

-A FILTERS -p tcp --dport 1234 -m state --state NEW -j ACCEPT -m comment --comment container1
-A FILTERS -p tcp --dport 5678 -m state --state NEW -j ACCEPT -m comment --comment container2

Можно попробовать ужесточить ограничение,

  • не подключается к сети bridge по умолчанию
  • найти сетевой интерфейс net1 и net2 через ip link show и ifconfig
  • замена трубопровода на
-F CONTAINER1-CONTAINER2
-F CONTAINER2-CONTAINER1
-A DOCKER-USER -i br-xxxx -o br-yyyy -j CONTAINER1-CONTAINER2
-A DOCKER-USER -i br-yyyy -o br-xxxx -j CONTAINER2-CONTAINER1
  • Изменение списка портов на
-A CONTAINER2-CONTAINER1 -p tcp --dport 1234 -m state --state NEW -j ACCEPT -m comment --comment container1
-A CONTAINER1-CONTAINER2 -p tcp --dport 5678 -m state --state NEW -j ACCEPT -m comment --comment container2
person Jeow Li Huan    schedule 01.01.2021
comment
Спасибо. Мне действительно нужно лучше изучить iptables команды. До сих пор я использовал UFW, но это не совместимо с Docker. - person IMTheNachoMan; 01.01.2021