EMQX服务docker-compose启动
常用命令
// 修改EMQX Dashboard 登录账号密码
admins passwd <Username> <Password>
// 示例
emqx ctl admins passwd admin admin2025
端口介绍
1883:MQTT 协议端口
8084:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口
相关配置文件
docker-compose.yml文件
version: '3'
services:
emqx:
container_name: emqx
image: emqx/emqx:latest
restart: always
privileged: true
ports:
- 18083:18083
- 1883:1883
- 8883:8883
- 8083:8083
- 8084:8084
- 8081:8081
volumes:
# 如果emqx不需要配置SSL证书,则etc目录可以不进行映射
- /data1/data/emqx/etc:/opt/emqx/etc
- /data1/data/emqx/data:/opt/emqx/data
- /data1/data/emqx/log:/opt/emqx/log
emqx.conf文件
注:容器内的配置文件路径为/opt/emqx/etc/emqx.conf
## NOTE:
## This config file overrides data/configs/cluster.hocon,
## and is merged with environment variables which start with 'EMQX_' prefix.
##
## Config changes made from EMQX dashboard UI, management HTTP API, or CLI
## are stored in data/configs/cluster.hocon.
## To avoid confusion, please do not store the same configs in both files.
##
## See https://www.emqx.io/docs/en/v5.0/configuration/configuration.html for more details.
## Configuration full example can be found in etc/examples
node {
name = "emqx@127.0.0.1"
cookie = "emqxsecretcookie"
data_dir = "data"
}
cluster {
name = emqxcl
discovery_strategy = manual
}
dashboard {
listeners.http {
bind = 18083
}
}
// 配置SSL证书(结合实际情况选择是否删除)
// 新版本与老版本的配置规则不一样,此处为新版本的配置规则
listeners.wss.default {
bind = "0.0.0.0:8084"
max_connections = 512000
websocket.mqtt_path = "/mqtt"
ssl_options {
keyfile = "etc/certs/myCert/jxglgcjczx.car.jxbd.com.cn.key"
certfile = "etc/certs/myCert/jxglgcjczx.car.jxbd.com.cn.pem"
cacertfile = "etc/certs/cacert.pem"
}
}
## 修改日志打印级别(EMQX的默认日志级别为warning,所以一般正常设备连接成功、消息发送成功等信息都不会在日志文件中体现)
log {
console_handler {
level = debug
formatter = text
}
}
关于/opt/emqx/etc目录映射方法
启动临时容器
docker run -dit --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest
拷贝配置文件
docker cp emqx:/opt/emqx/etc /data1/data/emqx/etc
删除临时容器
docker rm -f emqx
注
若yml文件启动后,发现EMQX一直在重启,查看日志:显示“没有权限创建文件夹或写数据”、“文件找不到”等错误;
针对权限不够问题,可以通过chmod命令解决
chmod -R 777 <文件目录路径>
针对文件找不到问题,主要etc目录映射出了问题
SSL证书配置
修改emqx.conf配置文件,设置证书路径
listeners.wss.default {
bind = "0.0.0.0:8084"
max_connections = 512000
websocket.mqtt_path = "/mqtt"
ssl_options {
keyfile = "etc/certs/my/bdcloud.jxbd.com.cn.key"
certfile = "etc/certs/my/bdcloud.jxbd.com.cn.pem"
cacertfile = "etc/certs/cacert.pem"
}
}
注:配置了ssl证书后,要想使用ssl连接wss就不能使用ip访问wss了,必须使用域名!!!
注意一般证书是3个月过期,如果证书过期,其表现是1883端口连接正常,8084显示一直重连中
附加篇
MQTT服务docker-compose启动:https://blog.csdn.net/xy3233/article/details/126728187
问题排查
两个独立的项目同时连接emqx相同端口时,似乎会发生抢占,导致一方连接不上
参考文章
【1】emqx日志配置
【2】emqx配置SSL证书
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?