我使用Nginx docker容器作为应用程序的基础镜像。我正在将Nginx日志重定向到syslog,但我不确定启动busybox syslogd的最佳方法是什么。如果我手动启动它,它都可以工作,我只需要它在容器运行时自动作为守护程序运行。
看到nginx在init.d中,我在我的Dockerfile文件中尝试了以下内容:
RUN ln -s /bin/busybox syslogd /etc/init.d/syslogd || :
但是syslogd仍然没有在启动时运行。因为documentation说只允许一个[CMD],所以我有以下技巧:
FROM nginx:mainline-alpine
CMD nginx & busybox syslogd -n这至少在本地是有效的,但我想知道什么是正确的解决方案。默认情况下,容器已经将日志文件符号链接到stdout和stderr,但我不想使用docker的syslog日志记录驱动程序,因为应用程序将被部署到Kubernetes,所以我需要一个独立的解决方案,它将在pod中工作。谢谢!
发布于 2020-04-02 07:36:19
将您的容器日志记录到stdout,但在其他地方收集日志。
一种选择是将Docker本身配置为send container logs to syslog
docker run --log-driver=syslog --log-opt syslog-address=udp://... ... nginx由于Docker守护进程本身正在配置,因此syslog-address必须是可以从主机访问的内容。如果您在单独的容器中运行syslogd,则此选项需要指向已发布的端口。
另一种选择是使用标准的Docker JSON格式的日志记录,但使用另一个工具将日志转发到其他地方。这有一个缺点,那就是需要一个额外的工具,但docker logs的优点是不需要修改。Fluentd是一个重要的开源选择。(Logstash是另一个,但似乎没有直接集成Docker。)
https://stackoverflow.com/questions/60974267
复制相似问题