docker 容器重启后,对于acl.conf以及Dashboard的密码修改全部恢复成了默认状态

环境

  • 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配置)

需要用环境变量固定 EMQX 节点名称,参考 https://hub.docker.com/r/emqx/emqx “ EMQX node name configuration” 这一节