У меня есть контейнер, на котором работает сервер, который прослушивает порт 5000 на предмет UDP-соединений. В Dockerfile установлен EXPOSE 5000 / udp, и когда я запускаю контейнер, я вижу, что PORTS правильно настроен на 5000 / udp.
Однако он работает не так, как ожидалось, потому что клиент не может подключиться к нему. Чтобы еще больше запутать ситуацию, netcat может нормально подключаться к порту 5000 через udp.
Я могу заставить все работать, указав -p 5000: 5000 / udp вручную. Это было бы хорошо, но я должен запустить этот контейнер в рое, и --publish 5000: 5000 / udp, похоже, не помогает.
Есть идеи, что я здесь делаю не так?
Покопавшись, я наконец нашел ответ. EXPOSE не «публикует» порт, поэтому вы должны опубликовать порт с помощью -p. Проблема, по крайней мере для меня, заключалась в том, что в swarm порт не публиковался правильно в реплицированном режиме.
Решением было создать службу в глобальном режиме и установить режим публикации на host:
- publish опубликовано = 5000, цель = 5000, протокол = udp, mode = host --mode = global