第一次使用emqx并且使用docker-compose进行部署,发现一个问题不管怎么修改配置文件还是env 都在重启emqx容器以后日志就消失了,下面附上yml,我感觉是env配置错了,但是不知道该如何修改,第一次使用emqx
version: ‘3.8’
services:
emqx:
image: emqx/emqx:5.0.4
container_name: emqx
environment:
- EMQX_LOG__FILE__ENABLE=true
- EMQX_LOG__FILE__PATH=/opt/emqx/log/emqx.log
- EMQX_LOG__FILE__LEVEL=debug
- EMQX_LOG__FILE__FORMATTER=text
- EMQX_LOG__FILE__ROTATION_COUNT=10
- EMQX_LOG__CONSOLE__ENABLE=false
- EMQX_LOG__FILE__ROTATION_SIZE=50MB
ports:
- “1883:1883” # MQTT 端口
- “8083:8083” # MQTT over WebSocket
- “8084:8084” # MQTT over WebSocket (SSL)
- “8883:8883” # MQTT (SSL)
- “18083:18083” # 管理仪表盘
volumes:
- ./emqx_data:/opt/emqx/data
- ./emqx_log:/opt/emqx/log
推荐用这个来生成配置:https://docker.emqx.dev/
里面的关键在于:
- EMQX_LOG__FILE__DEFAULT__ENABLE=true
- EMQX_LOG__CONSOLE__ENABLE=false
docker 默认的日志是直接输出到控制台的,也就是可以用 docker log 来查看,
你需要持久化到文件中,就要关掉控制台,直接开启文件日志。
用网站生成了直接 dowload,是最方便的。
PS:不过你使用的 5.0.4 的版本太低了,有些环境变量可能不一样,最好直接用 5.8.6
PS,你的配置我也没看出来有错,我能想到可能的原因就是 emqx_log 并没有挂载成功。
可以在宿主机上检查一下 emqx_log 是否有日志
我上面附上的yaml确实可以启动emqx,但是env缺不生效,我们的最终目的是想将log输出的日志持久化到宿主机里,后来发现只有在dashboard上配置的才生效,但是 容器一重启就只能 再去 ui里设置,高版本可以解决这个问题吗
高版本也解决不了。
你把
- EMQX_LOG__FILE__ENABLE=true
- EMQX_LOG__FILE__PATH=/opt/emqx/log/emqx.log
- EMQX_LOG__FILE__LEVEL=debug
- EMQX_LOG__FILE__FORMATTER=text
- EMQX_LOG__FILE__ROTATION_COUNT=10
- EMQX_LOG__CONSOLE__ENABLE=false
- EMQX_LOG__FILE__ROTATION_SIZE=50MB
改成:
- EMQX_LOG__FILE__DEFAULT__ENABLE=true
- EMQX_LOG__FILE__DEFAULT__PATH=/opt/emqx/log/emqx.log
- EMQX_LOG__FILE__DEFAULT__LEVEL=debug
- EMQX_LOG__FILE__DEFAULT__FORMATTER=text
- EMQX_LOG__FILE__DEFAULT__ROTATION_COUNT=10
- EMQX_LOG__CONSOLE__ENABLE=false
- EMQX_LOG__FILE__DEFAULT__ROTATION_SIZE=50MB
试试,
因为你的是 5.0.4,我都查不到你写的这些变量在低版本的文档里面能不能找到。
解决的思路就是:
因为你在容器里面已经dashboard配置过了,
所以找到 emqx_data/config/cluster.conf(应该叫这个吧), 高版本叫 cluster.hocon
然后找到
log{
}
里面有正确的配置格式的。
你只要把它用
EMQX_LOG__FILE__DEFAULT__ENABLE=true 的类似的 ENV 表达出来,
写到 docker-compose yaml文件里面就可以用了。
最后,还是非常推荐你使用 5.8.6,
5.0.4 已经过了维护周期了。使用这个版本,还会遇到很多已经修好的 bug,到时再升级更麻烦。
好的非常感谢官方大大回复,我们现在已经使用5.8.6版本,并且在这个版本上使用上面所说的env,没有任何问题,谢谢
但是我的这俩环境变量也是没生效
- EMQX_MQTT__SESSION__DEFAULT__EXPIRY__INTERVAL=10m
- EMQX_MQTT__MAX__DEFAULT__MQUEUE__LEN=1234
docker logs -f sc-emqx
WARNING: Default (insecure) Erlang cookie is in use.
WARNING: Configure node.cookie in /opt/emqx/etc/emqx.conf or override from environment variable EMQX_NODE__COOKIE
WARNING: NOTE: Use the same cookie for all nodes in the cluster.
[warning] unknown_env_vars: [“EMQX_MQTT__MAX__DEFAULT__MQUEUE__LEN”,
“EMQX_MQTT__SESSION__DEFAULT__EXPIRY__INTERVAL”]