Podman 无根日志记录

Podman 无根日志记录

我正在尝试从无根 podman 容器登录到主机的 systemd-journald。当我使用标志以 root 身份运行容器时--privileged,我可以按预期使用 journalctl 从主机上的容器中读取日志。但是,以无根模式运行容器会破坏上述日志记录功能(jornalctl 中没有显示任何内容)。有什么办法可以解决这个问题吗?

答案1

如果你的系统看起来像这样

$ grep Storage /etc/systemd/journald.conf 
#Storage=auto
$ ls /var/log/journal
ls: cannot access '/var/log/journal': No such file or directory
$ 

(这似乎是 CentOS 8.3 的默认设置)

你可以尝试

sudo mkdir /var/log/journal

然后重新启动计算机。

(这个解决方案在 CentOS 8.3 上对我有效)

解释

如果贮存auto在文件中设置为/etc/systemd/journald.conf 和目录/var/log/日志丢失,journal日志数据将只存储在内存中。

auto也是默认情况贮存文件中尚未设置/etc/systemd/journald.conf

另请参见此man journald.conf模式的调用位置volatile

有一个GitHub 问题在 Systemd 存储库中,标题为允许用户阅读自己的易变日志。我猜想sudo mkdir /var/log/journal在 GitHub 问题修复后就不再需要这样做了。

答案2

正如在 github 上看到的评论, 尝试

--log-driver journald 用于 podman create/run。使用该选项,conmon 将把容器输出写入 journald。

journald 日志驱动程序至少从版本 1.6.4(2019)

当 journald 事件记录器不可用时,不要使用它

过去几天我对此进行了测试,取得了巨大成功。在容器内绑定安装 /dev/log 后,我的一些容器能够写入系统日志。但是,最近具有明确 journald 支持的 CUPS 服务器无法写入 /dev/log。将此守护进程更改为写入 stderr,然后运行允许--log-driver journald日志记录被 journalctl 拾取并实际存储到 /var/log/messages 的容器。

我的环境是 RHEL8、podman 4.0.1 和 podman-compose 0.1.7。我从 github 问题中看到较新版本的 podman-compose 支持 docker-compose.yml 指令logging

由于我发现这个问题是针对我的问题在 Google 上搜索最多的问题,因此我希望记录下这个对我的问题和你的问题的答案,以帮助下一个可怜的灵魂寻找让无根 podman 写入 journald 的方法!

相关内容