はじめに
本ドキュメントでは、試験環境での利用を目的としたMQTT Broker (mosquitto)のセットアップ手順を記します。
前提条件
- コンテナ実行環境 (AMD64以外にもARM64などに対応しているようです。私はAMD64環境で確認しています。)
mosquittoの設定
準備作業
mosquittoコンテナイメージを取得します。
docker pull eclipse-mosquitto
mosquitto.confを用意します。デフォルトのmosquitto.confは、外部との通信ができない状態なので、下記を追加し、通信可能な状態とします。この手順は、SSL/TLS設定、認証、クライアント(Publisher/Subscriber)のIP制限などセキュリティ面を考慮しておらず、試験環境での利用目的としてご利用下さい。
allow_anonymous true
listener 1883 0.0.0.0
log_dest file /mosquitto/log/mosquitto.log
実行
docker run
コマンドを実行し、mosquittoを起動します。上記にて作成したmosquitto.confを/mosquitto/config/mosquitto.conf
としてマウントして使用します。{ホストマシンのconfファイルのフルパス}:{上記パス}と記載すれば機能します。
docker run -d -p 1883:1883 -v /home/ubuntu/mosq/config/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
確認
MQTTXなどで、{ip address}:1883
として接続確認およびメッセージの送受信を確認します。
(オプション) m1 macでlimaなどを使う場合
ファイルシステムの違いなどからdocker run
時にファイルを読ませることが難しい場合やlogファイル用ディレクトリのマウントができない場合などがあります。その場合は、こちらの手順を実施すれば起動できます。
FROM eclipse-mosquitto
COPY mosquitto.conf /mosquitto/config/
docker build -t my-mosquitto .
docker run -d -p 1883:1883 my-mosquitto
失敗例
local only mode
なので外部との通信ができません。
docker logs {Container ID}
1677048864: mosquitto version 2.0.15 starting
1677048864: Config loaded from /mosquitto/config/mosquitto.conf.
1677048864: Starting in local only mode. Connections will only be possible from clients running on this machine.
1677048864: Create a configuration file which defines a listener to allow remote access.
1677048864: For more details see https://mosquitto.org/documentation/authentication-methods/
1677048864: Opening ipv4 listen socket on port 1883.
1677048864: Opening ipv6 listen socket on port 1883.
1677048864: Error: Address not available
1677048864: mosquitto version 2.0.15 running
mosquitto.confファイルのフルパスを間違えてコンテナに渡し損ねたため、起動しない。docker stop {Container ID}
ののち、docker rm {Container ID}
すれば削除できます。
docker run -d -p 1883:1883 -v /home/ubuntu/mosq/config/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
5f258d3291e5b1d69e02bec93c41249ed189cd3c12be10ce9b4f7cba473f2c8e
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/ubuntu/mosq/config/mosquitto.conf" to rootfs at "/mosquitto/config/mosquitto.conf": mount /home/ubuntu/mosq/config/mosquitto.conf:/mosquitto/config/mosquitto.conf (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
ubuntu@gmktec:~/mosquitto$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f258d3291e5 eclipse-mosquitto "/docker-entrypoint.…" 5 seconds ago Created 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp brave_dirac