rootless Podman 下 Dozzle 容器内存统计不显示怎么配置 cgroup 委派?
【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzle
Dozzle 对接 rootless Podman(CLI 或 Quadlet 启动)时,一个典型现象是 UI 里所有容器都不显示内存统计。Dozzle 的 Podman 部署指南明确指出,这不是 Dozzle 侧的配置问题:rootless 部署中memorycgroup 控制器默认没有委派(delegate)给用户 slice,Docker 兼容 API 因此拿不到内存用量。这篇文章的做法是:先检查本机用户 slice 是否缺少memory委派,缺失时通过一个 systemd drop-in 文件开启委派,再重新验证。
适用前提:你的 Dozzle 容器已经通过某个用户的 rootless socket(/run/user/<UID>/podman/podman.sock)运行,且确认处于 rootless 模式。如何启动 Dozzle 容器本身不在本文范围内,可参考 docs/guide/podman.md 的 Rootless Setup 与 Quadlet Deployment 两节。
先确认问题是否出在 cgroup 委派上
检查当前用户 slice 实际拿到的控制器列表:
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllers命令里的$(id -u)会由 shell 自动替换为当前用户的 UID,可以直接执行。判断标准只有一条:输出中有没有memory。
- 输出里没有
memory:说明用户 slice 未被委派内存控制器,这正是指南 FAQ “rootless 模式下缺少内存统计”一节给出的原因,继续按下面配置委派。 - 输出里已有
memory但 UI 仍无统计:本文依据的文档只覆盖 cgroup 委派这一条根因,此情况需要另行排查,指南没有给出进一步步骤。
用 systemd drop-in 配置 cgroup 委派
下面的命令会在/etc/systemd/system/user@.service.d/下创建一个 drop-in 配置文件并重新加载 systemd 配置,三条命令都需要 root 权限(sudo)。副作用说明:mkdir -p幂等;tee会把delegate.conf的内容写入该路径,如果同名文件已存在且里面有你自定义的内容,会被这段配置直接覆盖,操作前请先确认;daemon-reload只重载 systemd 配置,不会重启任何服务。
sudo mkdir -p /etc/systemd/system/user@.service.d sudo tee /etc/systemd/system/user@.service.d/delegate.conf <<'EOF' [Service] Delegate=cpu cpuset io memory pids EOF sudo systemctl daemon-reloaddrop-in 的内容就是给user@服务追加Delegate=cpu cpuset io memory pids,其中memory是让内存统计可见的关键项。
使配置生效:注销并重新登录(或重启)
新的委派配置要在用户 slice 重建后才生效。指南给出的生效方式是:退出当前登录会话再重新登录,或者直接重启机器。仅执行daemon-reload而不重开会话,正在运行的用户 slice 不会应用新委派。
验证委派已生效
重新登录后,再次运行开头的检查命令:
cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllers这次输出中应包含memory。满足这一点后,打开 Dozzle 页面,容器列表中的内存统计即可正常显示。
边界与限制
- 指南的启动方式对照表里,只有 Quadlet(systemd)一行的“Memory Stats”标记为 ✗,注释为:rootless 模式下,除非启用了 cgroup v2 内存委派,内存统计通常不可用。本文的委派配置针对的就是 rootless 这一情形。
- 绑定了某个用户 rootless socket 的 Dozzle 只能看到该用户的容器,其他用户的 rootless 容器在独立命名空间里不会出现。如果你遇到的是“容器整个看不到”而不是“内存统计缺失”,那是跨用户可见性问题,与 cgroup 委派无关,指南给出的方案是:用同一用户运行 Dozzle,或改用 rootful 模式。
- 委派配置修改的是主机上的 systemd 用户会话配置,与 Dozzle 容器内的任何设置无关;删除
delegate.conf并daemon-reload、重开会话即可恢复原状(恢复操作是本文的合理逆操作,文档本身只描述了开启路径)。
【免费下载链接】dozzleRealtime log viewer for containers. Supports Docker, Swarm and K8s.项目地址: https://gitcode.com/GitHub_Trending/do/dozzle
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考