Docker-如何使用 syslog 在主机上记录日志?

Posted

技术标签:

【中文标题】Docker-如何使用 syslog 在主机上记录日志?【英文标题】:Docker- How to use syslog to record logs on host machine? 【发布时间】:2017-05-10 10:11:45 【问题描述】:

我希望将容器的日志保存到主机中每个容器的文件中。我通过logging driver阅读了关于这样做的信息。

由于我的主机运行 ubuntu 14.04,默认运行 rsyslog,我想使用 syslog

我所做的是使用以下命令来运行容器:

docker run -it --log-driver=syslog --log-opt syslog-address=udp://localhost:514 prashant23/ubuntu-java:sample-jdbc-project bash

我没有任何错误地进入容器。就这样?我怎么知道在哪里可以看到主机上的日志?我做对了吗?我不知道syslog。我是否也需要在我的容器上配置系统日志?有没有更好的方法来实现同样的目标。

我不确定我应该使用什么作为syslog-address。从哪里可以得到这个参数的值?我在某处读到的默认是udp://localhost:514

【问题讨论】:

【参考方案1】:

使用syslog驱动,你的Docker容器会将日志数据写入/var/log/syslog文件。您应该在该文件中找到您的容器日志。

syslog-address 仅在您使用外部系统日志服务器时才需要,这似乎不是您的情况。

使用默认驱动json-file,Docker会在这个路径下创建一个日志文件。

/var/lib/docker/containers/[container-id]/[container-id]-json.log

【讨论】:

谢谢。我不能指定一个单独的文件来存储主机 macine 上的日志吗?喜欢/var/log/docker/conatiner1.log/var/log/docker/conatiner2.log 感谢您的编辑。但这是默认行为。如果我正在使用 syslog 并希望将日志记录到我的自定义位置怎么办。仅当您没有使用任何日志记录驱动程序(默认)时,上述路径才有效,但如果您使用 syslog 驱动程序,则上述位置不存在。我通过使用 syslog 获取日志,只是我希望它位于每个容器的单独文件中,我希望创建日志的文件的路径和名称是可配置的。 @PrashantPrabhakarSingh 这是系统日志配置,不是吗? @kstromeiraos 我正在使用默认不包含 syslog 的 Linux 发行版。您能否提供在 dockerfile 中添加安装的说明?我见过这个: RUN apt-get -y install rsyslog 但它似乎不起作用。当我查看“/var/log”时,我没有看到任何“syslog”文件夹

以上是关于Docker-如何使用 syslog 在主机上记录日志?的主要内容,如果未能解决你的问题,请参考以下文章

无法登录到 docker 容器 syslog 文件

从一个 Docker 容器记录到另一个

是否可以在 Docker 中运行 syslog 并将其作为主机的 syslog 守护进程公开给主机?

docker log driver

使用 docker syslog 日志记录驱动程序处理日志文件

如何从 docker 容器中收集主机系统日志