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不生效的问题
- 容器名不匹配:你的cAdvisor容器名是
advisor,但配置里写的是--ignore_containers=cadvisor,参数值与实际容器名不一致,导致忽略规则不生效,改成--ignore_containers=advisor即可。 - 指标参数逻辑优化:
--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
相关产品推荐
相关产品推荐

