Не удается заставить docker swarm работать с traefik

#node.js #docker #docker-compose #docker-swarm #docker-swarm-mode

#node.js #docker #docker-compose #docker-swarm #режим docker-swarm-mode

Вопрос:

Я пытаюсь настроить базовую систему, в которой контейнер traefik служит обратным прокси для внутреннего сервера nodejs. Traefik находится в своем собственном контейнере, и у nodejs также есть контейнер. Цель здесь — разрешить обновление службы nodejs без каких-либо простоев с помощью docker в режиме swarm. Вот следующая конфигурация, которая у меня есть для моих файлов compose и traefik.yml, но, похоже, я не могу получить доступ к панели мониторинга traefik на localhost: 8080 или сервере nodejs.

Сервер nodejs запущен на порту 9200. Взглянул на существующие ответы stack overflow, и они в значительной степени имеют ту же конфигурацию, что и приведенная ниже. Я что-то здесь упускаю?

compose.yml

 version: "3.7"
services:
  api:
    image: example/hobby:v1
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 5
        window: 120s
      rollback_config:
        parallelism: 1
        delay: 20s
        order: stop-first
      update_config:
        parallelism: 1
        delay: 15s
        failure_action: rollback
        order: stop-first
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.api.rule=Host(`localhost`)"
        - "traefik.http.routers.api.entrypoints=insecure"
        # - "traefik.http.routers.api.service=api"
        - "traefik.http.services.api.loadbalancer.server.port=9200"
      placement:
        constraints:
          - node.role == worker
    env_file:
      - ./.env
    networks:
      - verse

  reverse-proxy:
    image: traefik:v2.3
    deploy:
      mode: global
      labels:
        # - "traefik.http.routers.reverse-proxy.middlewares=auth"
        - "traefik.enable=true"
        - "traefik.http.routers.api.entrypoints=insecure"
        - "traefik.http.routers.api.rule=Host(`localhost`)"
      placement:
        constraints: [node.role==manager]
    # ports:
    #   - target: 80
    #     published: 80
    #     mode: host
    #   - target: 8080
    #     published: 8080
    #     mode: host
    networks:
      - verse
    ports:
      - "80:80"
      - "8080:8080" # traefik dashboard
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      # - "/var/run/docker.sock:/var/run/docker.sock"
      - ./traefik.yml:/etc/traefik/traefik.yml

networks:
  verse:
    # driver: overlay
    external: false
  

traefik.yml

 entryPoints:
  insecure:
    address: ":80"
  traefik:
    address: ":8080"

log:
  level: DEBUG
  # filePath: /path/to/log-file.log
  format: json

api:
  # insecure: true
  dashboard: true
  debug: true

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    swarmMode: true
    watch: true
    network: verse

middlewares:
  auth:
    basicAuth:
      users:
        - "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"