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

Docker Compose中cAdvisor的enable_metrics命令失效及容器退出问题

问题分析与解决方案

一、添加command后容器退出的原因

从docker container inspect输出能看到,当你指定command: ["--version"]时,容器执行/usr/bin/cadvisor --version,该命令仅打印cAdvisor版本就会退出,因此容器状态为Exited (0)(ExitCode 0属于正常退出,因为命令已执行完成)。

cAdvisor官方镜像的默认启动参数包含-logtostderr,这是让cAdvisor持续运行并输出日志到标准错误的必要参数。当你在docker-compose中覆盖command字段时,会替换掉默认的CMD参数,导致cAdvisor无法进入持续监控的运行模式。

修复方法

在自定义command中保留默认的-logtostderr参数,再追加你的自定义参数。示例配置:

cadvisor:
  image: gcr.io/cadvisor/cadvisor:v0.47.1
  container_name: advisor
  command:
    - -logtostderr
    - --disable_metrics=accelerator,advtcp,app,cpu,cpu_topology,cpuset,disk,diskIO,hugetlb,memory_numa,oom_event,percpu,perf_event,process,referenced_memory,resctrl,sched,tcp,udp
    - --enable_metrics=cpuLoad,memory,network
    - --ignore_containers=advisor
  ports:
    - 8080:8080
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro # 原配置中"to"是笔误,应为只读权限ro

二、仅监控自身、--ignore_containers不生效的问题

  1. 容器名不匹配:你的cAdvisor容器名是advisor,但配置里写的是--ignore_containers=cadvisor,参数值与实际容器名不一致,导致忽略规则不生效,改成--ignore_containers=advisor即可。
  2. 指标参数逻辑优化:
    • --disable_metrics用于禁用指定指标,--enable_metrics用于启用指定指标,两者同时使用时,--enable_metrics会覆盖--disable_metrics中重复的指标(比如先禁用cpuLoad再启用,最终cpuLoad为启用状态)。
    • 若想仅保留指定指标,更简洁的方式是先禁用所有指标,再启用需要的子集:
      command:
        - -logtostderr
        - --disable_metrics=*
        - --enable_metrics=cpuLoad,memory,network
        - --ignore_containers=advisor
      

三、额外注意事项

  • 原volumes配置中的/var/lib/docker/:/var/lib/docker:to是笔误,需修正为ro(只读权限),否则可能引发权限异常。
  • 固定cAdvisor版本到v0.47.1是合理选择,可避免latest版本的兼容性风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:17:00