Docker swarm DNS仅在本地模式下返回服务

问题描述 投票:0回答:1

我想通过Prometheus自动从Docker中的所有实例化服务中抓取数据。我在一个有两个工人和大约7个服务的集群上这样做。我想要的服务是全球部署的。

我使用dns_sd_configtasks.cadvisor的目标设置了普罗米修斯。这将导致返回单个主机,而它应该是两个服务。

> tasks.cadvisor
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   tasks.cadvisor
Address: 10.0.1.9

在这个例子中,我只能找到一个CAdvisor节点,而实际上只有两个。

但是,当我查找在同一个工作节点上运行两次的服务时,查找会设法找到这两个服务

> tasks.nginx
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   tasks.nginx
Address: 10.0.1.25
Name:   tasks.nginx
Address: 10.0.1.20

似乎Docker DNS无法在其自己的工作节点之外进行查找。如何以DNS查找返回所有工作人员的所有服务实例的方式设置Docker?

这是我当前的docker设置:

version: '3'
services:
  db:
    image: postgres
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    volumes:
      - db-data:/var/lib/postgresql/data
  backend:
    build: reggie-server
    image: requinard2/reggie-server
    command: python manage.py runserver 0.0.0.0:8000
    deploy:
      mode: global
    environment:
      - PRODUCTION=1
    depends_on:
      - db
  nginx:
    build: reggie-nginx
    image: requinard2/reggie-nginx
    deploy:
      mode: global
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - "backend"
      - "prometheus"
      - "grafana"
  prometheus:
    build: reggie-prometheus
    image: requinard2/reggie-prometheus
    ports:
      - "9090:9090"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    volumes:
      - prometheus-data:/prometheus
    depends_on:
      - backend
      - cadvisor
  grafana:
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    image: grafana/grafana:5.1.0
    environment:
      GF_SERVER_ROOT_URL=/grafana:
    volumes:
      - grafana-data:/var/lib/grafana
    depends_on:
      - "prometheus"
  cadvisor:
    image: google/cadvisor:latest
    deploy:
      mode: global
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
      - redis
  redis:
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    image: redis:latest
volumes:
  backend-code:
  db-data:
  grafana-data:
  prometheus-data:
docker docker-swarm docker-networking docker-stack
1个回答
0
投票

在摆弄它后,我想到了尝试在与我一直使用的云不同的环境中运行这个特定问题。我使用docker-machine创建了两个本地实例,它立即工作。我开始挖掘一下,事实证明我的防火墙没有正确配置。这使我的节点无法与彼此通信。

所以我打开了以下端口,如here所述:

  • 2377 / TCP
  • 7946 / TCP&UDP
  • 4789 / UDP

这完全解决了问题,我的节点现在可以正常交谈!

© www.soinside.com 2019 - 2024. All rights reserved.