环境
- EMQX 版本: 5.0.24
- 操作系统版本:Docker
重现此问题的步骤
1. 采用docker-compose 进行项目部署,log、data以及etc均采用volumes进行数据持久化,docker-compose.yml相关内容如下:
version: "3"
services:
emqx:
image: emqx:5.0.24
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./emqx_data/log:/opt/emqx/log
- ./emqx_data/data:/opt/emqx/data
- ./emqx_data/etc:/opt/emqx/etc
ports:
- 18083:18083
- 8883:8883
- 1883:1883
2. 执行 sudo docker-compose up -d,一键启动
3. 容器启动后,登录Dashboard,并修改admin登录密码
4. 通过Dashboard修改acl.conf文件,修改后的内容如下:
{allow, {username, {re, "^dashboard$"}}, subscribe, ["$SYS/#"]}.
%%{allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
%%{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. %%解除远程客户端无法订阅系统主题的限制
{allow, all}.
5.测试功能,一切正常
6.重启emqx所在的容器(以下方法均尝试过结果一样:docker restart ,电脑重启、docker-compose restart)
7. 等容器重启完毕后,重新登录dashboard,发现admin的密码又恢复成默认的public
8. 查看acl.conf,发现acl.conf也恢复成默认的状态,如下:
{allow, {username, {re, "^dashboard$"}}, subscribe, ["$SYS/#"]}.
{allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
{allow, all}.
预期行为
在非docker安装的emqx无论如何重启系统,上述的两个配置都会保留的;所以理论docker安装的eqmx,且是进行了数据持久化处理的容器,即便在删除容器后,这些配置应该任然保留的。
实际行为
仅重启emqx容器,所有的配置均恢复为默认状态(密码和acl配置)