如何通过docker-compose运行Prometheus并采集本地Django服务指标
问题根因
Prometheus容器内部的127.0.0.1/localhost指向的是容器自身的网络环境,而非你运行Django服务的宿主机,所以会出现连接拒绝的报错。同时注意你报错日志中请求的是5000端口,需要先确认Django实际监听的端口是否和Prometheus配置一致。
解决步骤
1. 调整Django启动参数
默认python manage.py runserver仅绑定宿主机回环地址,需要修改启动命令允许所有网卡访问:
python manage.py runserver 0.0.0.0:8000
如果你的Django配置了ALLOWED_HOSTS,需要将后续用到的宿主机访问地址(如host.docker.internal、172.17.0.1)添加到列表中,避免返回400错误。
2. 根据操作系统选择网络配置方案
方案A:适用于Windows/Mac系统
Docker for Windows/Mac内置了特殊域名host.docker.internal,会自动解析到宿主机的内网地址,直接修改prometheus.yaml中django-app的targets即可:
- job_name: django-app static_configs: - targets: - host.docker.internal:8000
方案B:适用于Linux系统
两种可选配置:
- 方法1:让Prometheus容器共享宿主机网络
修改docker-compose.yml,给prometheus服务添加network_mode: host配置:
version: '3.6' services: prometheus: image: prom/prometheus volumes: - ./prometheus/:/etc/prometheus/ command: - '--config.file=/etc/prometheus/prometheus.yml' network_mode: host ports: - 9090:9090
这种方案下原Prometheus配置里的127.0.0.1:8000可以直接生效。
- 方法2:使用Docker网桥地址
Linux系统下Docker默认网桥docker0的IP一般为172.17.0.1,可以直接修改prometheus.yaml中django-app的targets:
- job_name: django-app static_configs: - targets: - 172.17.0.1:8000
如果默认地址不对,可以执行ip addr show docker0查看实际的网桥地址。
3. 重启生效
修改完配置后执行以下命令重启Prometheus容器:
docker-compose down && docker-compose up -d
重启后访问Prometheus的/targets页面,即可看到django-app任务状态变为正常UP状态。
内容的提问来源于stack exchange,提问作者everspader
相关产品推荐
相关产品推荐

