【问题标题】:Access MQTT broker in Docker container在 Docker 容器中访问 MQTT 代理
【发布时间】:2016-07-17 08:05:37
【问题描述】:

我在 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 端口上连接。

有什么建议吗?

【问题讨论】:

    标签: containers ibm-cloud mqtt mosca


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是 IBM 声明单实例容器仅用于测试目的,如果流量大,我将失去扩展能力。
    • 单实例容器适用于生产目的。您的服务是否预计流量会有巨大的变化?
    • 是的。如何使用单实例容器最好地支持这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2016-05-05
    相关资源
    最近更新 更多