我在 ubuntu 16.04 上运行 docker,想查看日志。但是,我猜想可能是某种轮换或日志增长到一定大小后,我无法查看日志。
我没有对 journald.conf 做任何更改,因此我使用默认设置。有容器正在运行,因此 docker log 输出了相当多的数据。
我所看到的例子:
systemctl docker status
确认服务已激活:
since Thu 2016-10-13 18:56:28 UTC
但是,当我运行类似这样的命令时:
journalctl -u docker.service --since "2016-10-13 22:00"
我得到的唯一输出是:
-- Logs begin at Fri 2016-10-14 01:18:49 UTC, end at Fri 2016-10-14 16:18:25 UTC. --
我可以按预期查看该范围内的日志。
我的问题是:为什么我无法使用 journalctl 查看旧日志,以及如何修复此问题以便我可以查看日志?
答案1
这可能是因为您正在尝试查看自上次启动以来的日志,这在 docker 镜像中似乎很可能是这种情况。
在 Ubuntu 16.04 上,日志存储默认为内存。您可以通过打开/etc/systemd/journald.conf
并将Storage=
行从auto
更改为 将默认值更改为持久性persistent
。您可能需要systemctl restart systemd-journald
在配置文件编辑后重新启动 journald。
我认为日志默认应该是持久的,所以我打开了一个有关此的错误。
答案2
发生这种情况的原因是由于日志文件存储大小的默认值。有关此内容的更多详细信息在文档中。值得一读我链接的整个部分,但默认的工作方式如下:
journald will use 10% of the disk or 4G, whichever is smaller.
journald will leave free 15% of the disk or 4G, whichever is larger.
为了查看上次启动时的日志,假设您Storage=persistent
在 journald.conf 中,正如其他答案所述,您可以使用命令--boot=-1
上的标志journalctl
来获取上次启动时的日志。
在 OP 确定主机没有重新启动的情况下,日志的丢失只是由SystemMaxUse
和/或SystemKeepFree
默认值引起的。
注意:我是 OP,这个问题仍然有越来越多的赞成票,所以因为我对 journald(和 rtfm)有了更多的经验,所以我在这里发布这个问题,希望它能对其他人有所帮助。