Access MQTT брокер в контейнере Docker

Я разместил брокера Mosca MQTT в экспресс-приложении node.js и пытаюсь запустить его в группе контейнеров в Bluemix. У меня проблемы с подключением к MQTT с использованием порта 1883, хотя я открыл порт 1883 в моем Dockerfile.

Брокер MQTT довольно прост:

var settings = {
  port: 1883,
};

var mqttserver = new mosca.Server(settings);

var httpServer = http.createServer(app);
mqttserver.attachHttpServer(httpServer);

var port = (process.env.VCAP_APP_PORT || 3000);

httpServer.listen(port, function(){
  console.log('Express server listening on port ' + port);
});

В моем Dockerfile я выставляю порт 80 и 1883

EXPOSE 1883
EXPOSE 80

Когда я создаю свою группу контейнеров в Bluemix, я выбираю порт 1883. Я могу подключиться к брокеру через порт 80, но не через порт 1883.

Есть предложения почему бы и нет?

1 ответ

Решение

Функции IBM Containers Scalable Group не поддерживают трафик не HTTP для открытых портов.

С помощью этой функции внешний URL-адрес привязывается к маршрутизатору Go, обслуживающему платформу. HTTP-запросы, отправленные на порт 80 по внешнему URL-адресу, будут отправлены на порт, выбранный вами во время настройки на хостах внутреннего контейнера. У вас нет прямого доступа к портам на контейнерах извне.

Если вы хотите предоставить MQTT-трафик, запустите контейнер как отдельный экземпляр, а не как группу. Вы можете выставить порты 1883 и 3000, что позволит вам соединяться с HTTP-запросами и MQTT-клиентами.

Другие вопросы по тегам