为什么logstash.yml需要可写权限?使用docker config挂载配置报错如何解决
Logstash Docker Config 只读报错原因说明
为什么Logstash要求配置文件有可写权限
从7.x版本开始,Logstash新增了配置动态修改和热重载能力,其内置的启动校验逻辑会强制检查配置文件对运行进程的用户(容器内默认是logstash用户,UID 1000)是否有可写权限,即使你没有开启动态配置相关功能,这个校验逻辑也会默认执行。部分版本的Logstash还会尝试向配置文件所在目录写入临时运行标记,也会触发可写权限要求。
该设计并非通用设计模式
常规无状态服务的静态配置仅需要读权限即可,要求配置文件可写的应用基本集中在两类场景:
- 支持通过API动态修改配置、配置热重载的中间件,除Logstash外,部分版本的Elasticsearch、Nginx商业版也有类似设计
- 需要在配置文件同目录写入运行时状态、临时缓存的应用
替代解决方案
如果不想改用volume挂载,仍希望通过docker config来统一管理配置,可以修改容器启动命令,先将只读挂载的配置复制到容器内可写目录再启动服务,示例docker-compose配置如下:
services: logstash: image: docker.elastic.co/logstash/logstash:7.14.0 configs: - source: ELK_LOGSTASH_SETTINGS target: /tmp/logstash.yml - source: ELK_LOGSTASH_CONF target: /tmp/logstash.conf command: > bash -c "cp /tmp/logstash.yml /usr/share/logstash/config/logstash.yml && cp /tmp/logstash.conf /usr/share/logstash/pipeline/logstash.conf && chown logstash:logstash /usr/share/logstash/config/* /usr/share/logstash/pipeline/* && /usr/local/bin/docker-entrypoint" configs: ELK_LOGSTASH_SETTINGS: external: true ELK_LOGSTASH_CONF: external: true
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

