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

Docker Compose下Prometheus连接cAdvisor被拒绝问题排查与解决

Docker Compose环境下Prometheus与cAdvisor容器间连接问题解决

问题现象

  • cAdvisor的DNS解析正常,Prometheus可ping通cAdvisor容器,但通过telnet访问其私有IP或容器名称时连接被拒绝
  • 若允许cAdvisor公网访问,Prometheus能通过公网IP:8081连接成功,但需求是不暴露cAdvisor到公网

相关配置

Docker Compose配置

version: '3.7'
networks:
  monitoring:
        driver: bridge
volumes:
  prometheus_data: {}
services:
  prometheus:
        image: prom/prometheus:latest
        user: "1000"
        environment:
          - PUID=1000
          - PGID=1000
        container_name: prometheus
        restart: unless-stopped
        volumes:
          - /home/sammantar/sammantar/Project/OpenSourceMonitoring/promgrafnode/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
          - /home/sammantar/sammantar/Project/OpenSourceMonitoring/promgrafnode/prometheus:/prometheus
        command:
          - '--config.file=/etc/prometheus/prometheus.yml'
          - '--storage.tsdb.path=/prometheus'
          - '--web.console.libraries=/etc/prometheus/console_libraries'
          - '--web.console.templates=/etc/prometheus/consoles'
          - '--web.enable-lifecycle'
        ports:
          - "9090:9090"
        networks:
          - monitoring


  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "127.0.0.1:8081:8080"
#    network_mode: "host" 
    networks:
      - monitoring
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
      - redis
    deploy:
      mode: global
    networks:
      - monitoring

初始Prometheus采集配置

global:
  scrape_interval: 1m

scrape_configs:
  - job_name: "prometheus" (Working)
    scrape_interval: 1m
    static_configs:
    - targets: ["localhost:9090"]

  - job_name: "node" (Working)
    static_configs:
    - targets: ["node-exporter:9100"]

  - job_name: "cadvisor" (not working)
    scrape_interval: 5s
    static_configs:
    - targets: ["cadvisor:8081"]

排查与解决方案

尝试使用cAdvisor容器的私有IP、容器别名连接均被拒绝,最终定位问题核心:容器间通信需使用容器内部监听的端口,而非映射到主机的端口。

cAdvisor容器内部监听的端口是8080,ports: "127.0.0.1:8081:8080"只是将主机的8081端口映射到容器的8080端口,该映射仅适用于主机与容器的通信,容器间直接通信需使用容器内部端口。

修正后的Prometheus采集配置:

global:
  scrape_interval: 1m

scrape_configs:
  - job_name: "prometheus" (Working)
    scrape_interval: 1m
    static_configs:
    - targets: ["localhost:9090"]

  - job_name: "node" (Working)
    static_configs:
    - targets: ["node-exporter:9100"]

  - job_name: "cadvisor" (not working)
    scrape_interval: 5s
    static_configs:
    - targets: ["cadvisor:8080"]

修改配置后,Prometheus即可正常通过容器名称+内部端口访问cAdvisor,无需暴露cAdvisor到公网。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:10:43