Контейнер Docker: связь UDP с другими хостами
Я пишу приложение на Python, которое непрерывно отправляет UDP-сообщения в предопределенную сеть с другими хостами и фиксированными IP-адресами. Я написал приложение на Python и докертизировал его. Приложение отлично работает в докере, никаких проблем нет.
К сожалению, мне не удается отправить UDP-сообщения от моего докера на хост, поэтому они будут отправлены на другие хосты в сети. То же самое для получения сообщений. Сейчас я не знаю, как настроить мой докер, чтобы он получал UDP-сообщение от хоста с фиксированным IP-адресом в сети.
Я пытался настроить мою сеть докеров с --net host
и я отправил все UDP-сообщения из моего док-контейнера через localhost на мой хост. Это тоже работало нормально. Мне не хватает ссылки, по которой я могу отправлять сообщения "нет" во "внешний мир". Я попытался сделать снимок моей проблемы.
Мой вопрос: Как мне настроить сетевую связь для моего докера / хоста, чтобы он мог получать сообщения через UDP от других хостов в сети? Спасибо
1 ответ
Итак, я много экспериментировал и понял, что мне просто нужно запустить контейнер докера с конфигурацией сети в качестве хоста. Разъем UDP в моем контейнере привязан к IP-адресу моего хоста и поэтому просто должен быть связан с сетью хоста. Все, кто борется с той же проблемой, просто бегают
docker run --network=host <YOURCONTAINER>
Построй свой собственный мост
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. В Docker для Mac или Docker для Windows щелкните значок Docker, выберите " Настройки" и перейдите в " Демон".
Если файл 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-адресов.
( ссылка)