我正在尝试从无根 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 的方法!