Назад | Перейти на главную страницу

Привязка порта UDP Docker не выполняется с помощью expose

У меня есть контейнер, на котором работает сервер, который прослушивает порт 5000 для UDP-соединений. В Dockerfile установлен EXPOSE 5000 / udp, и когда я запускаю контейнер, я вижу, что PORTS имеет 5000 / udp правильно.

Однако он работает не так, как ожидалось, потому что клиент не может подключиться к нему. Чтобы еще больше запутать ситуацию, netcat может без проблем подключиться к порту 5000 через udp.

Я могу заставить все работать, указав -p 5000: 5000 / udp вручную. Это было бы хорошо, но я должен запустить этот контейнер в рое, и --publish 5000: 5000 / udp, похоже, не поможет.

Есть идеи, что я здесь делаю не так?

Покопавшись, я наконец нашел ответ. EXPOSE не «публикует» порт, поэтому вы должны опубликовать порт с помощью -p. Проблема, по крайней мере для меня, заключалась в том, что в swarm порт не публиковался правильно в реплицированном режиме.

Решением было создать сервис в глобальном режиме и установить режим публикации для хоста:

--publish published=5000,target=5000,protocol=udp,mode=host --mode=global