emqx5的认证,docker环境变量无法使用

环境

  • EMQX 版本:5.0.25
  • 操作系统版本:docker

重现此问题的步骤

docker compose yaml文件

version: '3.9'

services:
  emqx:
    image: emqx/emqx:5.0.25
    environment:
      #EMQX_LOG_CONSOLE: "debug" # 默认为 warning
      - EMQX_LOG__CONSOLE_HANDLER__ENABLE="true" # 默认为 false
      - EMQX_LOG__CONSOLE_HANDLER__LEVEL="info" # 默认为 warning
    
      # 启用 MySQL 认证
      - EMQX_AUTHENTICATION__1='{mechanism="password_based",backend="mysql",server="host.docker.internal:3306",database="db",username="dbname",password="******",query="SELECT password_hash,salt FROM mqtt_user WHERE username=${username} LIMIT 1",enable=true}'
           
    ports: 
      - "8083:8083"
      - "18083:18083"
      - "1883:1883"

networks:
  default:
    name: emqx5-dev

预期行为

看文档,以及搜索github官方文档得到的信息,均显示可以在环境变量中配置认证。但尝试各种写法均不行。开始以为是占位符${username}的问题。但看来应该不是。

实际行为

产生了这样的报错:

emqx-dev-emqx-1  | 2023-05-15T04:21:52.008062+00:00 [error] failed_to_check_schema: emqx_conf_schema
emqx-dev-emqx-1  | 2023-05-15T04:21:52.013483+00:00 [error] #{kind => validation_error,path => "authentication.1",reason => "not_a_struct",value => <<"'{mechanism=\"password_based\",backend=\"mysql\",server=\"host.docker.internal:3306\",database=\"db\",username=\"dbname\",password=\"******\",query=\"SELECT password_hash,salt FROM mqtt_user WHERE username= LIMIT 1\",enable=true}'">>}
emqx-dev-emqx-1  | ERROR: call_hocon_failed: -v -t 2023.05.15.04.21.50 -s emqx_conf_schema -c /opt/emqx/etc/emqx.conf -d /opt/emqx/data/configs generate

我先去研究引用配置文件的方法。 这个环境变量的配置,同步等待看有没有人成功。

EMQX_AUTHENTICATION__1=“{mechanism=\“password_based\”,backend=\“mysql\”,server=\“host.docker.internal:3306\”,database=\“db\”,username=\“dbname\”,password=\”******\“,query=\“SELECT password_hash,salt FROM mqtt_user WHERE username=${username} LIMIT 1\”,enable=true}”
试试把单引号换成双引号,并把中间的双引号转义一下

您好,我尝试使用您指导的这种方式在environment中进行配置。
出现下述这种问题 :
EMQX_AUTHORIZATION__SOURCES [authorization.sources]: [#{<<“database”>> => <<“mqtt_user”>>,<<“enable”>> => true,<<“password”>> => <<“mqtt_user”>>,<<“query”>> => <<“SELECT action,permission,topic FROM mqtt_acl where is_del=0 and is_enable=1 and username=m1528”>>,<<“server”>> => <<“10.8.131.223:15432”>>,<<“type”>> => <<“postgresql”>>,<<“username”>> => <<“mqtt_user”>>}]
EMQX_AUTHORIZATION__SOURCES [authorization.sources.1]: {…}
EMQX_AUTHORIZATION__SOURCES [authorization.sources.1.query]: SELECT action,permission,topic FROM mqtt_acl where is_del=0 and is_enable=1 and username=m1528

query查询 将 ${username} 强制变成了我电脑的用户名称 m1528