Чем заменить `—net=container` в новой сети docker?

#networking #docker

#сеть #docker

Вопрос:

В дни, предшествующие docker 1.9, у меня был контейнер vpn-провайдера, который я мог использовать в качестве сетевого шлюза для других моих контейнеров, передав опцию --net=container:[container-name] .

Это было очень просто, но имело серьезное ограничение в том, что контейнер поставщика должен был существовать до запуска потребителей, и его нельзя было перезапустить.

Похоже, что новый сетевой стек docker отказался от этого положения в пользу создания сетей, что звучит лучше, но я изо всех сил пытаюсь добиться эквивалентного поведения.

Прямо сейчас я создал внутреннюю сеть docker network create isolated --internal --subnet=172.32.0.0/16 и запустил 2 контейнера, один из которых подключен только к внутренней сети, а другой — как к мосту по умолчанию, так и к внутренней сети.

Теперь мне нужно перенаправить весь сетевой трафик из изолированного контейнера через подключенный. Я возился с некоторыми правилами iptable, но tbh это не моя сильная сторона.

Итак, мои вопросы просты: является ли мой подход правильным? Какие правила должны быть установлены в двух контейнерах, чтобы это работало --net=container ?

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

1. Почему бы просто не продолжить использование --net=container ? Это по-прежнему полностью поддерживается Docker 1.12.1, даже при использовании пользовательских сетей.

2. Интересно. Во время моего вчерашнего тестирования казалось, что пользовательские сети несовместимы с этим, я, конечно, еще раз взгляну на это, поскольку это может быть человеческая ошибка. Спасибо.

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