​ 之前有写实体机MQTT服务器搭建(mosquitto) | Regen的流程,容器化部署是大趋势,也不能落下。

​ 如果你对mqtt的数据存储有兴趣的话不妨看看。

​ 看了dockerhub的镜像,选择了eclipse-mosquitto:2.0.22-openssl

拉取镜像

1
docker pull eclipse-mosquitto:2.0.22-openssl

准备文件

准备mosquitto.conf passwordfile

mosquitto.conf

1
2
3
4
5
6
7
8
9
10
11
# 监听端口
listener 1883
# 禁止匿名登录
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/passwordfile

# 可选:持久化和日志
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

passwordfile用于使用账号密码登录,用以下命令进行创建该文件

1
docker run --rm -it -v $(pwd):/mosquitto/config eclipse-mosquitto:2.0.22-openssl mosquitto_passwd -c /mosquitto/config/passwordfile admin

创建好了会出现在当前目录

docker-compose 持久化部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3.8"

services:
mosquitto:
image: eclipse-mosquitto:2.0.22-openssl
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "8883:8883" # 如果启用了 TLS
volumes:
- ./config:/mosquitto/config
- ./data:/mosquitto/data
- ./log:/mosquitto/log

测试案例

使用docker exec -it mosquitto sh进入容器内命令行工具。之后才能执行以下命令。

1
2
mosquitto_pub -h 127.0.0.1 -p 1883 -t test -m "hello"
mosquitto_sub -h 127.0.0.1 -p 1883 -t test