最新syslog-ng Docker镜像启动失败:源文件未找到求助
解决syslog-ng Docker容器报错:Follow-mode file source not found
问题原因
报错提示/var/log/test_log不存在,因为你的syslog-ng配置中指定该文件作为日志源,但容器启动时该文件并未在容器内创建,也未从宿主机挂载对应文件。syslog-ng的file源默认以跟随模式运行,当目标文件不存在时会延迟尝试打开,从而抛出该警告。
解决方案
方案1:挂载宿主机文件到容器
- 在宿主机当前工作目录创建所需的日志文件:
touch test_log destination_log
- 修改Docker启动命令,添加文件挂载参数,将宿主机文件映射到容器内对应路径:
docker run --privileged -d -it \ -v "$PWD/syslog-ng.conf":/etc/syslog-ng/syslog-ng.conf \ -v "$PWD/test_log":/var/log/test_log \ -v "$PWD/destination_log":/var/log/destination_log \ --name syslog-ng balabit/syslog-ng:latest -edv
这种方式既解决了文件不存在的问题,还能在容器删除后保留日志数据。
方案2:修改syslog-ng配置自动创建文件
编辑syslog-ng.conf,给file源添加create(yes)参数,让syslog-ng自动创建不存在的源文件:
@version: 4.8 @include "scl.conf" source s_local { file("/var/log/test_log" create(yes)); }; destination d_local { file("/var/log/destination_log"); }; log { source(s_local); destination(d_local); };
保存配置后重启容器:
docker restart syslog-ng
注意:这种方式创建的文件仅存在于容器内部,容器删除后文件会丢失,适合临时测试场景。
内容的提问来源于stack exchange,提问作者Pavel Nikolaev
相关产品推荐
相关产品推荐

