You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7下Docker启动cadvisor报oci runtime error问题求助

CentOS 7.9 环境下 cadvisor 突发 Exit 128 启动失败排查指南

核心问题定位逻辑

你现在遇到的OCI runtime init提前退出,根本不是cadvisor应用本身的报错——此时cadvisor进程根本还没启动,故障出在容器初始化的挂载、设备权限检查阶段,结合“之前长期稳定运行、隔夜突发故障”的特征,90%概率和系统自动更新改动了cgroup/设备挂载状态有关。
首先按顺序做校验:

  • 第一步先查宿主机cgroup当前的挂载状态,执行:
    mount | grep cgroup
    
    重点核对你compose配置里单独写的这条挂载映射:
    - /sys/fs/cgroup/cpu,cpuacct:/sys/fs/cgroup/cpuacct,cpu:rw
    
    很多运维遇到过CentOS7的yum自动更新打了systemd或libcgroup补丁后,原本独立分离的cpu、cpuacct两个cgroup子目录,被合并成了单一路径的挂载点,导致你写的这个“源路径映射到目标路径”的配置直接错位,容器初始化时挂载失败直接exit 128。
  • 做个快速验证:手动启动一个和cadvisor挂载配置完全一致的临时容器,看能不能正常起来:
    docker run --rm -it -v /sys/fs/cgroup/cpu,cpuacct:/sys/fs/cgroup/cpuacct,cpu:rw busybox sh
    
    如果这个临时容器同样启动失败,就100%确认是cgroup挂载配置和当前宿主机状态不匹配的问题,和cadvisor镜像、运行参数没关系。

按优先级试修复方案

优先级1:删除错位的冗余cgroup挂载

你配置里其实已经挂载了整个/sys/fs/cgroup目录为只读,那行单独的cpu/cpuacct rw挂载是早年旧版cadvisor对3.10老内核的兼容补丁,现在宿主机cgroup结构变了之后,这行配置纯属反作用。直接删掉这行,调整后的volumes配置为:

volumes:
  - /:/rootfs:ro
  - /var/run:/var/run:rw
  - /sys:/sys:ro
  - /var/lib/docker:/var/lib/docker:ro
  - /dev/disk/:/dev/disk:ro
  - /sys/fs/cgroup:/cgroup:ro

改完直接执行docker-compose up -d cadvisor拉起就行,大部分隔夜突发的场景都是这个问题。

优先级2:固定cadvisor镜像版本,别用latest标签

你用的是gcr.io/cadvisor/cadvisor:latest,如果隔夜有人手动拉取了最新镜像,大概率会出现兼容问题:当前最新版本的cadvisor已经砍掉了对CentOS7 3.10内核、Docker 1.13老版本的支持,要求最低Docker 18.09以上的环境,根本没法在你现在的版本下跑起来。
直接把镜像标签改成你之前长期稳定运行时对应的兼容版本,比如gcr.io/cadvisor/cadvisor:v0.47.0——这是最后一个适配你这套CentOS7.9 + Docker 1.13组合的cadvisor版本,后续新版本都移除了老内核cgroup的适配逻辑。

优先级3:校验/dev/kmsg的设备权限

如果删了冗余挂载、换了固定版本镜像还是报init失败,查下yum更新日志:

grep -i "systemd\|libcgroup" /var/log/yum.log

如果看到隔夜有systemd版本的更新记录,会触发一个CentOS7的已知问题:systemd重载后会收紧/dev/kmsg的访问权限,你compose里写了要把/dev/kmsg映射进容器,会因为设备权限校验不通过直接导致init退出。
这种情况要么直接删掉compose里的devices配置段(cadvisor对/dev/kmsg的依赖是非强绑定的,只是用来读取内核OOM、磁盘异常日志,不影响容器、主机的核心监控指标采集),要么手动给宿主机的/dev/kmsg放开权限:chmod 666 /dev/kmsg再重新启动容器。

避坑提醒

  • 不要浪费时间反复调整cadvisor的启动参数、修改--docker_only的配置:Exit 128是初始化阶段的错误,此时cadvisor的二进制程序根本还没被执行,改参数完全没用。
  • 别上来就想着升级Docker大版本:生产环境Docker升级的风险远大于当前cadvisor的监控缺失风险,先按上面的步骤定位修复就行。

内容的提问来源于stack exchange,提问作者zabumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 20:15:01