Ubuntu22.04部署cAdvisor v0.36.0报无法获取"/"容器缓存错误
故障判定
该问题属于cAdvisor版本兼容性问题,不是Docker配置错误。
你使用的cAdvisor v0.36.0发布时间较早,未完全适配Ubuntu 22.04默认启用的cgroup v2、systemd cgroup驱动、rootless Docker运行模式的组合场景,无法正确读取cgroup层级的监控数据,最终触发unable to find data in memory cache报错。你环境中Docker启动日志打印的cpu、io cgroup资源不支持的警告,也对应了rootless模式下cgroup权限配置的场景特征,旧版cAdvisor无法兼容该环境。
修复方案
按实际需求选择以下任意一种方案即可:
- 方案1:升级cAdvisor版本(推荐)
升级到v0.44.0及以上的稳定版本,这类版本已经完成cgroup v2适配,启动时补全cgroup挂载路径与必要权限即可正常运行:# 先删除旧的异常容器 docker rm -f cadvisor # 启动适配cgroup v2的新版cAdvisor docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \ --privileged \ --publish=8080:8080 --detach=true \ --name=cadvisor \ gcr.io/google-containers/cadvisor:v0.47.0 - 方案2:保留旧版cAdvisor,切换系统cgroup版本
若必须使用v0.36.0版本,可将系统cgroup切回v1模式适配旧版本:- 编辑grub配置文件
/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT配置项末尾追加参数systemd.unified_cgroup_hierarchy=0 - 执行
sudo update-grub更新系统引导配置 - 重启主机后重新启动cAdvisor容器即可
- 编辑grub配置文件
- 方案3:调整cAdvisor启动参数绕过根容器探测
如果不需要采集宿主机本身的监控数据,仅需要监控Docker运行的业务容器,可在启动命令后追加--docker_only=true参数,跳过对根容器/的指标采集,直接绕过该报错:# 先删除旧的异常容器 docker rm -f cadvisor # 启动参数追加docker_only标识 docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 --detach=true \ --name=cadvisor \ gcr.io/google-containers/cadvisor:v0.36.0 \ --docker_only=true
验证方式
容器启动完成后等待10秒左右,访问localhost:8080,若能正常加载cAdvisor监控页面,无内存缓存相关报错即为修复成功。
内容的提问来源于stack exchange,提问作者Yan Paing Oo
相关产品推荐
相关产品推荐

