Контейнер Docker: связь UDP с другими хостами - PullRequest
0 голосов
/ 25 января 2019

Я пишу приложение на Python, которое непрерывно отправляет UDP-сообщения в предопределенную сеть с другими хостами и фиксированными IP-адресами. Я написал приложение на Python и докертизировал его. Приложение отлично работает в докере, проблем там нет.

К сожалению, мне не удается отправить UDP-сообщения от моего докера на хост, поэтому они будут отправлены на другие хосты в сети. То же самое для получения сообщений. Сейчас я не знаю, как настроить докер, чтобы он получал UDP-сообщение от хоста с фиксированным IP-адресом в сети.

Я попытался настроить мою сеть докера с помощью --net host, и я отправил все UDP-сообщения из моего контейнера докера через localhost на мой хост. Это тоже работало нормально. Мне не хватает ссылки, по которой я могу отправлять сообщения "нет" во "внешний мир". Я попытался сделать снимок моей проблемы.

Docker host communication problem

Мой вопрос: Как мне настроить сетевую связь для моего докера / хоста, чтобы он мог получать сообщения через UDP от других хостов в сети? Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Итак, я много экспериментировал и понял, что мне просто нужно запустить контейнер докера с конфигурацией сети в качестве хоста. Разъем UDP в моем контейнере привязан к IP-адресу моего хоста и поэтому просто должен быть связан с сетью хоста. Все, кто борется с той же проблемой, просто бегите

docker run --network=host <YOURCONTAINER>
0 голосов
/ 25 января 2019

Построй свой собственный мост

1.Настройте новый мост.

$ sudo ip link set dev br0 up

$ sudo ip addr add 192.168.5.1/24 dev bridge0

$ sudo ip link set dev bridge0 up

Подтвердите настройки нового моста.

$ ip addr show bridge0

4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
    link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.1/24 scope global bridge0
       valid_lft forever preferred_lft forever <br/>       

2. Настройте Docker для использования нового моста, установив параметр в файле daemon.json, который находится в /etc/docker/ в Linux или C:\ProgramData\docker\config\ в Windows Server. В Docker для Mac или Docker для Windows щелкните значок Docker, выберите Предпочтения и перейдите к Daemon .

Если файл daemon.json не существует, создайте его. Предполагая, что в файле нет других настроек, он должен иметь следующее содержимое:

{
  "bridge": "bridge0"
}

Перезапустите Docker, чтобы изменения вступили в силу.

3. Убедитесь, что настроен новый исходящий маскарад NAT.

    $ sudo iptables -t nat -L -n

    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination
    MASQUERADE  all  --  192.168.5.0/24      0.0.0.0/0

4.Снимите неиспользуемый docker0 мост.

$ sudo ip link set dev docker0 down

$ sudo ip link del name br0

$ sudo iptables -t nat -F POSTROUTING

5.Создайте новый контейнер и убедитесь, что он находится в новом диапазоне IP-адресов.

( ссылка .)

...