Docker 容器内访问宿主机的问题

查看 69|回复 4
作者:ztfot   
想使用node_exporter监控,但端口不想暴露在公网(开启 ufw),如果想让prometheus容器访问宿主机localhost:9100 应该怎么做

  • prometheus容器的 docker 初始化代码:
    docker run -d -p 127.0.0.1:9090:9090 \ # 不暴露在公网不能改
      -v /storage/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
      --restart=always \
      --name=prometheus \
      --net=prometheus-bridge \ # 不能改, 因为有很多容器都在这个网桥内
      --ip 172.18.0.2 \        # 不能改
      prom/prometheus

  • 这个是node_exporter的代码,本来也加上了prometheus-bridge, 但这样就无法监控宿主机网络流量了
    如果想监控宿主机网络流量必须使用network_mode:host 但是 host 无法与bridge一起用(默认端口0.0.0.0:9100)
    version: '3.8'
    services:
      node_exporter:
        image: quay.io/prometheus/node-exporter:latest
        container_name: node_exporter
        command:
          - '--path.rootfs=/host'
        network_mode: host
        pid: host
        restart: unless-stopped
        volumes:
          - '/:/host:ro,rslave'

  • /storage/prometheus/prometheus.yml 这是当前的配置文件,不想把node_exporter暴露在公网
    使用了ufw enable 防止外部访问
    - job_name: node-exporter
      static_configs:
        - targets: ['公网 IP:9100']        # 这个是当前的配置文件用的公网,想改成内网访问

  • 尝试过使用host.docker.internal:9100 但是开了防火墙后无法访问?

  • 不知道有没有什么好的解决方案?

  • Navee   
    node-exporter 的话
    要么暴露公网+防火墙规则限制
    要么暴露公网+basic auth
    ixiaohei   
    你说的公网是指互联网么?
    shelken   
    进去你的 prometheus 容器看看 host.docker.internal 实际的请求 ip ,然后 ufw 对这个 ip 开放
    wheat0r   
    能确定在不开防火墙情况下 host.docker.internal:9100 可以访问吗?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部