使用Docker设置多个MQTT代理
通过使用Docker,我能够使用eclipse mosquitto为我的应用程序设置一个MQTT代理,它订阅消息。我现在正在学习Docker,所以想尝试向Docker compose添加两个代理,并使用如下映射的不同端口:使用Docker设置多个MQTT代理,docker,docker-compose,mqtt,Docker,Docker Compose,Mqtt,通过使用Docker,我能够使用eclipse mosquitto为我的应用程序设置一个MQTT代理,它订阅消息。我现在正在学习Docker,所以想尝试向Docker compose添加两个代理,并使用如下映射的不同端口: version: '3' services: myapp: ... links: - mqtt - mqtt2 depends_on: - mqtt - mqtt2 mqtt: image
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 X终端),mqtt
和mqtt2
都在工作;我可以按预期发布和订阅消息
const mqtt = require('mqtt')
mqtt.connect('mqtt://mqtt', {port: 1883}) // Success
mqtt.connect('mqtt://mqtt2', {port: 1884}) // Success
但是,当我在myapp
的容器中时,我只能连接到mqtt
mqtt2
connection立即触发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
容器在主机上看不到映射的端口。它将查看网络中的内容。在本地网络中,两个都在收听
1883
显示更多myapp代码现在链接不再有用了吗?是的,不再需要了