Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Docker设置多个MQTT代理_Docker_Docker Compose_Mqtt - Fatal编程技术网

使用Docker设置多个MQTT代理

使用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

通过使用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
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代码现在
链接不再有用了吗?是的,不再需要了