Elastalert在Docker环境下无法修改默认UTC时区该如何解决?
解决Docker中Elastalert时区不生效问题
仅设置TZ环境变量不生效主要有两个原因:一是Debian/Alpine等精简基础镜像默认未预装时区数据库,时区配置无法落地;二是Elastalert默认会读取自身配置文件中的时区参数,优先级高于系统环境变量。你可以按以下步骤修改:
- 第一步:调整Dockerfile配置,补装时区数据库并写入系统配置
若使用Debian/Ubuntu系基础镜像:
若使用Alpine系基础镜像:RUN apt-get update && apt-get install -y tzdata \ && ln -sf /usr/share/zoneinfo/你需要的时区 /etc/localtime \ && echo "你需要的时区" > /etc/timezone \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV TZ="你需要的时区"
时区值请填写IANA标准时区,比如RUN apk add --no-cache tzdata \ && ln -sf /usr/share/zoneinfo/你需要的时区 /etc/localtime \ && echo "你需要的时区" > /etc/timezone ENV TZ="你需要的时区"Asia/Shanghai对应中国北京时间。 - 第二步:修改Elastalert配置文件,明确指定时区
在全局配置config.yaml中添加如下参数:
也可以在单个规则的yaml配置文件中添加上述参数,优先级高于全局配置。timezone: 你需要的时区 - 第三步:验证生效情况
重新构建镜像启动容器后,进入容器执行date命令,确认系统时区输出符合预期后,再测试规则的时间是否正常。 - 可选临时方案:无需修改Dockerfile的启动配置
启动容器时直接挂载宿主机的时区文件并传入环境变量即可:docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v /etc/timezone:/etc/timezone:ro \ -e TZ=你需要的时区 \ 你的Elastalert镜像名称
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

