2015-02-06 3 views
7

После тщательных исследований, тестирования и прошивки я смог найти только подключение контейнера Docker к данному интерфейсу путем пересылки с IP-адреса/порт. Это можно сделать, добавив -p Host-IP:Host-Port:Container-Port в команду docker run.Подключение контейнера Docker к сетевому интерфейсу/устройству вместо IP-адреса

У меня есть приложение, которое прослушивает широковещательные рассылки UDP (255.255.255.255) и не может настроить переадресацию таким образом, чтобы мой контейнер получал эти широковещательные рассылки без пересылки всего сетевого трафика на порт, который мне волнует (нет материя, через которую он входит), то есть: -p Host-Port:Container-Port.

Можно сконфигурировать контейнер с помощью --net=host и просто написать мой код для привязки к данному интерфейсу, который я сделал и протестировал, но это все еще противоречит основной идее контейнера. Цель состоит в том, чтобы несколько контейнеров одного и того же приложения прослушивали разные сетевые интерфейсы (как в устройствах, не в адресах).

Любые идеи о том, как я мог это сделать?

EDIT # 1: Подумав об этом еще немного, возможно, что настройка моста через необходимый интерфейс достаточно, но я не доверяю ОС для отправки широковещательных пакетов по ней. Оставайтесь с нами, когда я выполняю больше тестов.

EDIT # 2: Пакеты отправляются через мост просто отлично. Однако мост сконфигурирован как мост Docker по умолчанию. Я не мог понять, как запускать контейнеры на разных мостах. Увидел несколько заметок, указывающих на настройку сети на --net=none и настройку ее самостоятельно через настройки контейнера lxc.

+0

почему докер не мост достаточно хорошо? –

+0

Не удалось настроить мост докеров так, чтобы я мог указать, к каким сетевым интерфейсам подключиться. Это означает, что я не могу иметь отдельные контейнеры для сетевого интерфейса. – tryexceptpass

+1

вы можете разместить свое решение? Мне нужно что-то подобное, чтобы запустить экземпляр DHCP внутри контейнера докера –

ответ

-1

По умолчанию команда запуска docker издает порты для tcp. Попробуйте указать использование UDP:

docker run -p Host-Port:Container-Port/UDB ...

+1

Проблема не в пересылке портов, это пересылка данных из определенного интерфейса. – tryexceptpass

+0

Какой интерфейс вы хотите переслать? –

+1

Я использую слово «интерфейс» в этом случае для обозначения сетевого устройства. Если у меня есть система с двойным состоянием, и я хочу только предоставить услугу в одной из сетей, я не нашел способ сделать это. Пересылка данных с определенного IP-адреса недостаточна в том случае, если я использую широковещательные или многоадресные пакеты. – tryexceptpass

 Смежные вопросы

  • Нет связанных вопросов^_^