Переход к контейнерам flask и vue с помощью traefik

Я пытаюсь адаптировать this для использования traefik v2, но у меня ужасно не получается . Все службы могут общаться друг с другом и работают, но я не могу заставить маршруты работать для dev env. Не понимаю почему.

docker-compose.dev.command.yml:

version: '3.3'
services:
  proxy:
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.swarmMode=false"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.traefik.address=:8080"

  # backend:
  #   command: bash -c "while true; do sleep 1; done"  # Infinite loop to keep container live doing nothing

  backend:
    command: /start-reload.sh

docker-compose.dev.labels.yml:

version: '3.3'
services:
  proxy:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`localhost`)"
      - "traefik.http.routers.traefik.rule=PathPrefix(`/dashboard/`)"
      - "traefik.http.routers.traefik.entrypoints=traefik"

  backend:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.backend.entrypoints=web"
      - "traefik.http.routers.backend.rule=Host(`localhost`) && PathPrefix(`/redoc`) || PathPrefix(`/api`) || PathPrefix(`/docs`)"

  frontend:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.frontend.entrypoints=web"
      - "traefik.http.routers.frontend.rule=Host(`localhost`) && PathPrefix(`/`)"

docker-compose.dev.networks.yml:

version: '3.3'
services:
  backend:
    networks:
      default:
        aliases:
          - ${DOMAIN}

Я пробовал все, что только мог придумать, но никак не могу заставить это работать. Если я проверю панель управления traefik, маршрутизаторы ссылаются на правильные службы с правильными IP: s, и я могу попробовать вручную, чтобы убедиться, что они работают, но маршруты просто не будут работать.

Что я делаю неправильно?


person user2333489    schedule 23.03.2020    source источник


Ответы (1)


вам не хватает метки сервиса для ваших определений, вам нужны как минимум следующие метки на ваших внутренних сервисах

        - traefik.enable=true
        - traefik.http.routers.backend.entrypoints=web
        - traefik.http.services.backend.loadbalancer.server.port=${rplace with service port}
        - traefik.http.routers.backend.rule=Host(`localhost`) && PathPrefix(`/redoc`) || PathPrefix(`/api`) || PathPrefix(`/docs`)
        - traefik.http.routers.backend.service=backend
        - traefik.docker.network=traefik

то же самое для сброса сервисов, вы можете прочитать об этом здесь

person Al-waleed Shihadeh    schedule 24.03.2020
comment
Все службы, включая traefik, используют сеть по умолчанию, которая создается при запуске docker-compose up. Я попробовал ваше решение, но оно все еще не работает. (Он не работает в режиме роя) - person user2333489; 24.03.2020
comment
вам не хватает этой строки traefik.http.services.backend.loadbalancer.server.port, она самая важная - person Al-waleed Shihadeh; 24.03.2020