LoginSignup
3
5

More than 3 years have passed since last update.

mosquittoをdocker-composeで動かす

Posted at

概要

mosquittoはとても平たく言えば、簡単にpub/subサーバーを持てるということ。

  • mosquitto = pub/subサーバー
  • クライアントはmosquitto-clientsなどを入れてサーバーにsubscribeしたり、publishしたり出来る

問題

情報が少ない、色々見渡しても書いてあることがまちまち。
docker-composeで設定してみるとどうもdatalogディレクトリが書き込まれない
よく書かれている設定だけでは、サーバー、クライアントが同一ホストでないとConnection Refused: not authorisedエラーが出る。

簡単な解決方法

docker-compose.yml
version: "3"
services:
  client:
    build:
      context: ./client
    tty: true

  broker:
    image: eclipse-mosquitto
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    user: "1000:1000"

まず、broker(pub/subサーバー)のvolumesuserid $(whoami)のuid:gid)を上のように設定しないと、どうしてもlogが入ってこない。

mosquitto.conf
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_type all # 全部

# この2つの設定がないとdocker-compose内のclientからアクセスできない(Connection Refused: not authorisedが出る)
listener 1883
allow_anonymous true

クライアント側ではsudo apt-get install -y mosquitto-clientsなどとしてmosquitto_submosquitto_pubコマンドを手に入れておく。

使い方

$ sudo docker-compose up -d

$ docker exec -it __client__ ash # container名は自身の環境に合わせて変える、ターミナルでこれを2枚開く
client1
mosquitto_sub -h broker -t topic_name
client2
mosquitto_pub -h broker -t topic_name -m message

これでclient1にmessageが届く

因みに

$ docker exec -it __broker__ ash

として入ると、/mosquitto-no-auth.confというファイルがあり、これに認証無しで他ホストから接続できるようにする設定が書いてある。

また、volumesの設定をなしで同じようにコンテナ内に入り/mosquitto/config/mosquitto.confをみるとデフォルトのconf内容がわかる。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5