在docker中运行prometheus实现性能监控,核心是容器化部署并打通“采集—存储—展示”链路:需拉取v2.47.2镜像、配置prometheus.yml接入docker引擎(9323端口)、node exporter(9100)和cadvisor(8080),通过host.docker.internal网络连通,挂载持久化卷,启动后验证targets为up,并可选集成grafana可视化。

在Docker中运行Prometheus实现性能监控,核心是把Prometheus服务容器化,并接入真实指标源。整个过程不复杂但容易忽略关键配置细节,重点在于打通“采集—存储—展示”链路。
准备基础环境与镜像
确保宿主机已安装Docker(建议24.0+稳定版),然后拉取官方Prometheus镜像:
- 执行docker pull prom/prometheus:v2.47.2(推荐LTS版本,避免v2.50+新版本的兼容性波动)
- 检查镜像是否就绪:docker images | grep prometheus
- 如需长期运行并保留历史数据,提前创建命名卷:docker volume create prometheus-data
编写有效的prometheus.yml配置
配置文件决定Prometheus能监控什么。一个实用的最小配置应包含本地Docker引擎、主机资源和容器运行时三类目标:
- Docker守护进程指标:需先在/etc/docker/daemon.json中启用"metrics-addr": "127.0.0.1:9323",再重启Docker服务
- 主机资源指标:用Node Exporter容器暴露:9100/metrics,每台被监控机都要运行:docker run -d -p 9100:9100 --restart=always prom/node-exporter
- 容器运行时指标:cAdvisor采集容器级数据,命令示例:docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor gcr.io/cadvisor/cadvisor:v0.49.1
- 在prometheus.yml中统一配置这些target,注意使用host.docker.internal让容器访问宿主机服务
启动并验证Prometheus容器
用一条命令启动带持久化和网络连通性的Prometheus实例:
- docker run -d \
- --name prometheus \
- -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
- -v prometheus-data:/var/lib/prometheus \
- -p 9090:9090 \
- --add-host host.docker.internal=host-gateway \
- --restart=unless-stopped \
- prom/prometheus:v2.47.2
启动后访问http://localhost:9090/targets,确认所有job状态为UP;在Graph页输入process_cpu_seconds_total等指标测试查询是否生效。
连接Grafana做可视化(可选但强烈建议)
Prometheus自带界面适合调试,生产环境建议搭配Grafana:
- 运行Grafana容器:docker run -d -p 3000:3000 --name grafana -e GF_SECURITY_ADMIN_PASSWORD=admin123 grafana/grafana-enterprise
- 浏览器打开http://localhost:3000,添加Prometheus为数据源(URL填http://host.docker.internal:9090)
- 导入现成仪表盘ID,比如Node Exporter Full(1860)或Docker and container metrics(193)








