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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:03