Docker 如何使节点导出器和cadvisor仅对prometheus容器可用?

Docker 如何使节点导出器和cadvisor仅对prometheus容器可用?,docker,docker-compose,devops,prometheus,docker-container,Docker,Docker Compose,Devops,Prometheus,Docker Container,我已经在docker容器中成功地安装了Prometheus服务。我还在同一主机的不同其他端口上运行node exporter和cadvisor等服务 所有服务都使用docker compose运行。 这是样品 version: '2' volumes: grafana_data: {} services: prometheus: image: prom/prometheus privileged: true volumes:

我已经在docker容器中成功地安装了Prometheus服务。我还在同一主机的不同其他端口上运行node exporter和cadvisor等服务

所有服务都使用docker compose运行。 这是样品

version: '2'


volumes:
    grafana_data: {}

services:

    prometheus:
        image: prom/prometheus
        privileged: true
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
            - ./alertmanager/alert.rules:/alertmanager/alert.rules
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
            - '9090:9090'

    node-exporter:
        image: prom/node-exporter
        ports:
            - '9100:9100'
    cadvisor:
        image: google/cadvisor:latest 
        privileged: true
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:rw
            - /var/lib/docker/:/var/lib/docker:ro
            - /dev/disk/:/dev/disk:ro
            - /cgroup:/sys/fs/cgroup:ro
        ports:
            - '8080:8080'
如何使cadvisor服务不可供公众访问 现在,每个人都可以访问cadvisor和节点导出器 主机url及其正在分配的端口。但是作为普罗米修斯 取决于它,只有普罗米修斯才能接近它


如果不需要从外部访问该服务,只需不发布该服务的端口,就可以从每个服务中删除端口部分。生成的合成文件如下所示:

version: '2'
volumes:
    grafana_data: {}
services:
    prometheus:
        image: prom/prometheus
        privileged: true
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
            - ./alertmanager/alert.rules:/alertmanager/alert.rules
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
            - '9090:9090'

    node-exporter:
        image: prom/node-exporter
        # removed "ports" from here

    cadvisor:
        image: google/cadvisor:latest 
        privileged: true
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:rw
            - /var/lib/docker/:/var/lib/docker:ro
            - /dev/disk/:/dev/disk:ro
            - /cgroup:/sys/fs/cgroup:ro
        # removed "ports" from here

容器通过共享网络相互通信,默认情况下,您可以通过docker compose或docker堆栈获得共享网络。要使用容器到容器的网络,请按目标容器的服务名称引用它(在本例中:
节点导出器
cadvisor
),并使用容器端口,而不是发布的端口,在您的情况下,该端口是相同的。

此配置应按预期工作。请注意,您需要更新Prometheus配置,以通过别名(
节点导出器
CAdvisor
)而不是IP引用节点导出器和CAdvisor

version: '2'
volumes:
    grafana_data: {}
services:
    prometheus:
        image: prom/prometheus
        privileged: true
        volumes:
            - ./prometheus.yml:/etc/prometheus/prometheus.yml
            - ./alertmanager/alert.rules:/alertmanager/alert.rules
        command:
            - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
            - '9090:9090'
        links:
            - 'node-exporter'
            - 'cadvisor'
    node-exporter:
        image: prom/node-exporter
    cadvisor:
        image: google/cadvisor:latest 
        privileged: true
        volumes:
            - /:/rootfs:ro
            - /var/run:/var/run:rw
            - /var/lib/docker/:/var/lib/docker:ro
            - /dev/disk/:/dev/disk:ro
            - /cgroup:/sys/fs/cgroup:ro

这就是我不使用expose或ports命令运行节点导出器的方式。但在检查docker ps时,它仍然将端口暴露给主机。可能是因为我曾经使用过该端口,所以它正在使用缓存,这种情况会发生吗?是的,此外,我们可以通过在docker中定义自己的网络并将该网络仅连接到所需的容器来使其更加安全。