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

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

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

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

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

0
задан 7 March 2019 в 08:52
1 ответ

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

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

- publish опубликовано = 5000, цель = 5000, протокол = udp, mode = host --mode = global

0
ответ дан 5 December 2019 в 03:50

Теги

Похожие вопросы