Как получить доступ к сервису, запущенному в другом контейнере Docker при использовании сетевого «контейнера»:" - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь настроить контейнер firewall, который разрешает только исходящий трафик через определенный IP-адрес, используя iptables.У меня есть второй контейнер (openvpn), который устанавливает OpenVPN с этим IP.

Контейнер брандмауэра находится в пользовательской сети (созданной с помощью docker network create <name>), а контейнер openvpn использует --network container:firewall.

Настройка брандмауэра работает нормально.Выходной трафик работает только при подключенном openvpn.

Проблема:

Я хотел добавить способ проверки настройки брандмауэра перед запуском openvpn.Я решил запустить сокет в контейнере брандмауэра с nc -l -k -p 5000 localhost и опрашивать его с помощью этого скрипта ожидания .

Проблема в том, что я не могу отреагировать на этот сокет вв любом случае из другого контейнера.На firewall контейнер nc -vz localhost 5000 подключается нормально.Я думал, что, поскольку они совместно использовали свой сетевой стек, я мог бы также вызывать nc -vz localhost 5000 для контейнера openvpn, но это не работает.Я перепробовал все IP-адреса, которые контейнеры показывают в ifconfig, и безуспешно пытался не привязать nc к интерфейсу (например, nc -l -k -p 5000).

Я неправильно понял, как работает --network container:<name>, иличто-то еще мне не хватает?

Я проверил это с простыми контейнерами Ubuntu, а также с Alpine Linux.

...