![如何让 systemd 从 docker 镜像中获取服务日志?](https://linux22.com/image/777824/%E5%A6%82%E4%BD%95%E8%AE%A9%20systemd%20%E4%BB%8E%20docker%20%E9%95%9C%E5%83%8F%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E6%97%A5%E5%BF%97%EF%BC%9F.png)
因此,正如标题所示,我有一个在 docker 中运行的容器化服务,并且我有一个 systemd 服务单元来自动管理该服务。除此之外,我还想将 docker 容器的日志发送到服务日志。有什么方法可以将命令中提供的日志docker logs SERVICE
传输到 systemd 服务日志的输出吗?
我第一次尝试设置一个ExecStartPost
调用docker logs -f SERVICE
,但这似乎不起作用,因为重新启动服务会出现错误。我还发现此链接关于记录到 journald,我觉得这可能是正确的,但我没有看到提供明确的方法来管道化它具体来说对于有问题的 systemd 服务。
答案1
默认情况下,Docker 使用json 文件日志记录驱动程序。这会将数据写入磁盘上的平面 json 文件。如果继续使用它,您将需要一些外部工具来解析这些日志,这将是一个完全复杂的混乱,因此您绝对应该更改它。
你最初的评估是正确的:使用journald 日志驱动程序在您的场景中。您需要使用标签系统设置适当的SYSLOG_IDENTIFIER
值。
tag optional Specify template to set CONTAINER_TAG and SYSLOG_IDENTIFIER value in journald logs. Refer to log tag option documentation to customize the log tag format.
Docker 日志驱动程序列表如下:https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers