访问 Docker 容器中的 MQTT 代理

Access MQTT broker in Docker container

我在 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 中创建我的容器组时,我 select 端口 1883。 我可以在端口 80 上连接到代理,但不能在端口 1883 上连接。

有什么建议吗?

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

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

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