我该如何更改Docker容器日志的保存位置?

16

由于“docker”驱动器上的空间有限,我希望将容器的所有标准输出消息记录到外部驱动器中。

使用docker-compose v3,我使用“json-file”驱动程序将日志保存为10 MB块。

logging:
  driver: "json-file"
  options:
    max-size: 10m

默认情况下,生成的日志保存在/var/lib/docker/containers/<container id>/<container id>-json.log

有没有办法更改这个位置?


是的,我正在尝试找到这个问题的答案。对我来说,似乎这不是开箱即用的,我无法理解为什么没有明确说明。 - gai-jin
3个回答

1

1
直截了当的答案 - 不行。
为什么?
使用 "json-file" 日志驱动程序编写的文件不适用于外部软件,应将其视为 "JSON 日志驱动程序" 的 "内部存储机制"。因此,位置不可配置。
如果您想将日志写入其他位置,请考虑使用(例如)"syslog" 驱动程序、"journald" 或允许将日志发送到集中日志聚合器的驱动程序之一。
来源:https://github.com/moby/moby/issues/29680

0

我不确定是否有现成的解决方案。

但你可以尝试在json文件日志驱动程序上设置最低限制,然后将所有日志保存在单独的目录中,像这样:

docker-compose logs -f 2>&1 | multilog t s1048576 n100 ./my_log_directory

你应该在后台运行此程序以记录所有日志

这段代码需要将所有的stderr视为stdin,以便multilog可以保存它们:

2>&1

关于multilog的更多信息,请参见此处:https://serverfault.com/questions/445118/rotating-logs-generated-by-a-process-that-logs-to-stdin#445461

虽然它可能适合您的需求,但您仍将失去json-file驱动程序提供的一些信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接