2017-09-13 3 views
1

Docker를 사용하여 메시지를 구독하는 내 응용 프로그램으로 eclipse-mosquitto을 사용하여 MQTT 브로커를 설정할 수있었습니다. 그래서 다음과 같이 매핑 다른 포트와 부두 노동자가-구성에 두 개의 브로커를 추가 원했고, 지금 도커를 배우고 :Docker를 사용하여 둘 이상의 MQTT 브로커 설정

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의 터미널에서) mqttmqtt2 모두 작동합니다. 예상대로 메시지를 게시하고 구독 할 수 있습니다. 내가 myapp의 컨테이너 내부에있을 때

const mqtt = require('mqtt') 
mqtt.connect('mqtt://mqtt', {port: 1883}) // Success 
mqtt.connect('mqtt://mqtt2', {port: 1884}) // Success 

하지만, 난 단지 mqtt에 연결할 수 있습니다. mqtt2 연결은 즉시 offline 이벤트를 시작하며 연결에 실패합니다. myapp에 두 브로커를 모두 올바르게 사용하려면 어떻게해야합니까? 여기

+0

더 많은 myapp 코드보기 – hardillb

답변

1

두 가지 문제

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

+0

더 이상 링크가 없습니다. – musicliftsme

+0

예, 더 이상 필요하지 않습니다. –