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

M2 Mac上cAdvisor无法获取容器详细信息,求排查方案

问题分析与解决方案

你的问题核心是M2 Mac的Docker虚拟化环境下,cAdvisor无法正确识别并关联Docker容器元数据,导致Prometheus中仅显示容器ID、无法有效筛选,且cAdvisor页面缺少Subcontainers板块。以下是针对性修复步骤:

1. 升级cAdvisor镜像并调整运行参数

你当前使用的v0.47.2版本在arm64(M2)平台上的容器元数据采集存在兼容性问题,建议升级到支持arm64的稳定版本,并添加关键运行参数:

修改docker-compose中cadvisor服务的配置:

cadvisor:
  image: gcr.io/cadvisor/cadvisor:v0.48.1  # 升级到兼容arm64的稳定版本
  platform: linux/arm64/v8  # 更精确的arm64平台标识
  privileged: true
  container_name: cadvisor
  ports:
    - "8080:8080"
  volumes:
    - /etc/machine-id:/etc/machine-id:ro
    - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
    - /:/rootfs:ro
    - /var/run/docker.sock:/var/run/docker.sock:ro  # 添加只读权限增强安全性
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    - /dev/disk/:/dev/disk:ro
  command: ["--docker_only=true", "--storage_driver=overlay2"]  # 仅监控Docker容器,指定存储驱动
  networks:
    - monitoring
  • --docker_only=true:过滤掉非Docker的系统容器,减少Prometheus中多余的无效条目
  • --storage_driver=overlay2:明确指定Docker存储驱动(macOS Docker默认使用overlay2),避免cAdvisor自动探测出错

2. 验证cAdvisor的容器元数据采集

重启服务后,访问http://localhost:8080/metrics,搜索是否包含container_name、image_name等带容器标识的指标,例如:

container_cpu_usage_seconds_total{container_name="your-flask-app",image_name="your-flask-image",...}

若能看到这类标签,说明cAdvisor已正确识别容器元数据。同时访问http://localhost:8080/docker/,此时应能看到Subcontainers板块列出你的Flask应用容器。

3. 优化Prometheus的指标筛选

在Prometheus配置中添加relabel规则,过滤掉监控栈自身容器的指标,只保留你的Flask应用数据:

scrape_configs:
  - job_name: 'cadvisor'
    scrape_interval: 10s 
    metrics_path: '/metrics'
    static_configs:
      - targets: ['cadvisor:8080']
        labels:
          group: 'cadvisor'
          alias: 'cadvisor'
    relabel_configs:
      - source_labels: [container_name]
        regex: '^(cadvisor|prometheus|grafana|loki|promtail)$'  # 排除监控栈自身容器
        action: drop

4. 额外排查说明

  • 你日志中的两条警告属于arm64平台的兼容性提示,不会影响容器元数据采集,可忽略。若需要更详细的调试信息,可在cAdvisor的command中添加--logtostderr=true --v=2开启debug日志,查看是否有容器连接相关错误。
  • 确保Docker Desktop已开启"Use the new Virtualization framework"选项(设置>Features in development),这会提升arm64容器的兼容性。

迁移到Linux主机的注意事项

迁移时只需移除platform参数(Linux会自动匹配本地架构),同时确保/var/run/docker.sock、/var/lib/docker等路径的权限正确(cAdvisor需要读取这些路径的权限),其余配置可直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:31:08