使用Docker设置多个MQTT代理
使用Docker,我可以使用eclipse-mosquitto
来设置一个MQTT代理,我的应用程序订阅了消息。 我现在正在学习Docker,所以想尝试将两个代理添加到Docker中 – 用不同的端口组成这样的映射:
version: '3' services: myapp: ... links: - mqtt - mqtt2 depends_on: - mqtt - mqtt2 mqtt: image: eclipse-mosquitto:latest container_name: mqtt-iot ports: - 1883:1883 mqtt2: image: eclipse-mosquitto:latest container_name: mqtt2-iot ports: - 1884:1883
从myapp
容器的外部 (即从我的OS Xterminal), mqtt
和mqtt2
都在工作; 我可以按预期发布和订阅邮件。
const mqtt = require('mqtt') mqtt.connect('mqtt://mqtt', {port: 1883}) // Success mqtt.connect('mqtt://mqtt2', {port: 1884}) // Success
但是,当我在myapp
的容器中时,我只能连接到mqtt
。 mqtt2
连接立即触发offline
事件,并且没有连接失败。 我需要做些什么来让myapp
正确使用这两个经纪人?
这里有两个问题
links: - mqtt - mqtt2
链接已被弃用,甚至不需要在您的撰写。 接下来当你使用下面
const mqtt = require('mqtt') mqtt.connect('mqtt://mqtt', {port: 1883}) // Success mqtt.connect('mqtt://mqtt2', {port: 1884}) // Success
从外面。 这是基于主机上的端口。 当你从应用程序容器中做到这一点,你应该像下面这样做
const mqtt = require('mqtt') mqtt.connect('mqtt://mqtt', {port: 1883}) // Success mqtt.connect('mqtt://mqtt2', {port: 1883}) // Success
容器无法看到主机上的映射端口。 它会看到networking内部是什么。 而在本地networking上都是在1883
收听