Docker 如何在nginx容器中启动syslogd

Docker 如何在nginx容器中启动syslogd,docker,nginx,Docker,Nginx,我使用docker容器作为应用程序的基本映像。我正在将Nginx日志重定向到syslog,但我不确定启动busybox syslogd的最佳方式是什么。如果我手动启动它,这一切都可以正常工作,我只需要在容器运行时将其作为守护进程自动运行 看到nginx位于init.d中,我在Dockerfile中尝试了以下方法: 运行ln-s/bin/busybox syslogd/etc/init.d/syslogd | |: 但是syslogd在启动时仍然没有运行。由于声明只允许使用一个[CMD],因此我有

我使用docker容器作为应用程序的基本映像。我正在将Nginx日志重定向到syslog,但我不确定启动busybox syslogd的最佳方式是什么。如果我手动启动它,这一切都可以正常工作,我只需要在容器运行时将其作为守护进程自动运行

看到
nginx
位于
init.d
中,我在Dockerfile中尝试了以下方法:

运行ln-s/bin/busybox syslogd/etc/init.d/syslogd | |:

但是
syslogd
在启动时仍然没有运行。由于声明只允许使用一个
[CMD]
,因此我有以下攻击:

FROM nginx:mainline-alpine
CMD nginx & busybox syslogd -n

这至少在本地有效,但我想知道什么是正确的解决方案。默认情况下,容器已经将日志文件符号链接到
stdout
stderr
,但我不想使用docker的日志驱动程序,因为应用程序将部署到,所以我需要一个在pod中工作的自包含解决方案。谢谢大家!

将容器日志保存到stdout,但在其他地方收集日志

一个选项是将Docker自身配置为:

由于Docker守护进程本身正在配置此功能,因此系统日志地址必须是可以从主机访问的。如果在单独的容器中运行syslogd,则此选项需要指向已发布的端口


另一种选择是使用标准Docker JSON格式日志,但使用另一种工具将日志转发到其他地方。这样做的缺点是需要一个额外的工具,但是,
docker日志的优点是可以不经修改地工作。是一个突出的开源选项。(Logstash是另一个,但似乎没有直接与Docker集成。)

将容器日志记录到stdout,但在其他地方收集日志

一个选项是将Docker自身配置为:

由于Docker守护进程本身正在配置此功能,因此系统日志地址必须是可以从主机访问的。如果在单独的容器中运行syslogd,则此选项需要指向已发布的端口


另一种选择是使用标准Docker JSON格式日志,但使用另一种工具将日志转发到其他地方。这样做的缺点是需要一个额外的工具,但是,
docker日志的优点是可以不经修改地工作。是一个突出的开源选项。(Logstash是另一个,但似乎没有直接与Docker集成。)

投票赞成,因为这可能是一个好的解决方案。我没有使用它的原因是因为我将部署到Kubernetes。更新了我的问题,希望还有其他选择。您还可以将Fluentd部署为守护程序,以便从Kubernetes发送日志。Kubernetes文档,但它们都是从将日志内容写入自己的标准输出的容器开始的。虽然不确定EKS中是否考虑了日志旋转,但可能需要进行设置,需要进行一些研究。向上投票,因为这可能是一个很好的解决方案。我没有使用它的原因是因为我将部署到Kubernetes。更新了我的问题,希望还有其他选择。您还可以将Fluentd部署为守护程序,以便从Kubernetes发送日志。Kubernetes文档,但它们都是从将日志内容写入自己的标准输出的容器开始的。虽然不确定EKS中是否考虑了日志旋转,但可能需要进行设置,需要进行一些研究。
docker run --log-driver=syslog --log-opt syslog-address=udp://... ... nginx