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-клиентами.