需手动配置 docker daemon 的 metrics-addr 参数(如 "127.0.0.1:9323")并重启服务,启用 prometheus 兼容指标端点;该接口仅提供引擎级指标,容器级资源数据需依赖 cadvisor 或 containerd cgroups 接口。

要在 Docker 中启用容器的系统资源统计监控接口,核心是让 Docker 守护进程暴露 Prometheus 兼容的 metrics 端点。这并非容器运行时自动开启的功能,需手动配置 Docker daemon。
启用 Docker 内置 metrics 接口
Docker 20.10+ 版本原生支持通过 metrics-addr 配置项暴露指标(如 CPU、内存、网络、镜像、容器生命周期等),数据格式为标准 Prometheus text exposition 格式。
- 编辑守护进程配置文件:
sudo vim /etc/docker/daemon.json - 添加或修改配置,指定监听地址和端口(建议绑定到本地或受信网络):
{ "metrics-addr": "127.0.0.1:9323", "experimental": false } - 保存后重启 Docker:
sudo systemctl restart docker - 验证是否生效:
curl http://127.0.0.1:9323/metrics,应返回以# TYPE开头的指标文本
确认监控接口可用的关键细节
该接口默认仅暴露 Docker 引擎自身指标(如 docker_daemon_up、docker_container_status、docker_network_count),不包含单个容器的细粒度资源使用率(如容器级 CPU 百分比、内存 RSS)。这些实时资源指标需由 cAdvisor 或 containerd 的 cgroups 接口 提供。
- 确保 Docker 使用 containerd 作为运行时(Docker 20.10+ 默认),cgroups v2 已启用(推荐),否则部分内存/IO 指标可能缺失
- 若需容器级资源指标(如
container_cpu_usage_seconds_total),必须额外部署 cAdvisor 并将其纳入 Prometheus 抓取目标 - 防火墙需放行配置的端口(如 9323),但生产环境不建议设为
0.0.0.0:9323,防止未授权访问指标数据
配合 Prometheus 抓取指标
启用 metrics 接口后,Prometheus 即可将其作为 job 抓取:
- 在
prometheus.yml中添加如下配置:
- job_name: 'docker-daemon' static_configs: - targets: ['localhost:9323'] - 重启 Prometheus,访问
http://<prometheus>:9090/targets</prometheus>查看该 target 是否 UP - 在 Prometheus 表达式浏览器中输入
docker_container_status{state="running"}等指标即可查询
补充说明:与 docker stats 的关系
docker stats 命令底层读取的是每个容器的 /sys/fs/cgroup/(或 /proc/[pid]/stat)数据,并非走 metrics 接口。它适合人工快速查看,但不可替代 metrics 接口——后者是面向自动化采集、长期存储与告警的标准化入口。











