使用 Docker,我能够使用 eclipse-mosquitto 为我的应用程序设置一个 MQTT 代理,该代理订阅消息。我现在正在学习 Docker,所以想尝试向 Docker-compose 添加两个代理,并映射不同的端口,如下所示:
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
连接立即触发 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
关于docker - 使用 Docker 设置多个 MQTT 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208288/