0

我在 node.js express 应用程序中托管 Mosca MQTT 代理,并尝试在 Bluemix 的容器组中运行它。我在使用端口 1883 连接到 MQTT 时遇到问题,即使我在 Dockerfile 中公开了端口 1883。

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 上连接。

有什么建议为什么不呢?

4

1 回答 1

1

IBM Containers Scalable Group功能不支持公开端口的非 HTTP 流量。

使用此功能,外部 URL 绑定到为平台服务的 Go 路由器。对外部 URL 上的端口 80 发出的 HTTP 请求将发送到您在内部容器主机上配置期间选择的端口。您无法从外部直接访问容器上的端口。

如果要公开 MQTT 流量,请将容器作为单个实例而不是组启动。您可以选择公开端口 1883 和 3000,允许您连接 HTTP 请求和 MQTT 客户端。

于 2016-07-18T08:22:53.343 回答