2017-09-13 7 views
1

Dockerを使用して、eclipse-mosquittoを使用してメッセージを購読するアプリケーションでMQTTブローカーを設定することができました。 、複数のMQTTブローカーを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 Xターミナルから):私はこのようにマッピングされた異なるポートでドッカー-構成する2つのブローカを追加してみたかった、今ドッカーを学んでいます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

2つの問題

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

はい、もう必要ありません –

関連する問題