docker-compose traefik 与 PathRegexp 的问题

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

我正在尝试做的事情:

我有一个 docker-compose 文件,其中包含 4 个容器 traefik、UI、API 和 DB。

我想使用 traefik 将容器 UI 和 API 重定向到端口 80,但位于不同的 url 路径上。 UI 直接重定向到 localhost:80 ,API 我想重定向到 localhost/api ,但问题是 localhost/api 已经被有效的 html 代码包含在 UI 容器中。因此,我需要将其从 API 路由中排除,或者提供一个我无法创建的有效 PathRegexp。

这是我正在尝试 PathRegexp 的 docker-compose:

想法是仅重定向 api 端点,例如 /api/endpoint1/api/endpoint2,但不重定向 /api 本身,因为我需要重定向到 UI 容器。

version: "3"

services:

  api:
    build:
      context: .
      dockerfile: ./api/dockerfile
    depends_on:
      - db
      - traefik
    labels:
      - "traefik.http.routers.api.rule=Host(`localhost`) && PathRegexp(`^/api/.*`)"
    ports:
      - 5000:5000

  ui:
    build:
      context: .
      dockerfile: ./ui/dockerfile
    depends_on:
      - api
      - db
      - traefik
    volumes:
      - ./ui/html/:/var/www/html
    labels:
      - "traefik.http.routers.ui.rule=Host(`localhost`)"
    ports:
      - 81:81
      - 443:443

  db:
    image: mysql
    restart: always
    env_file: .env
    environment:
        MYSQL_ROOT_PASSWORD: $ROOT_PASS_MYSQL
        MYSQL_DATABASE: $PRACTICE_DB
    ports:
      - 3307:3306
    volumes:
      - ./db/mysql:/docker-entrypoint-initdb.d/:ro

  traefik:
    image: traefik:v2.9
    command: --api.insecure=true --providers.docker
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

使用此配置我收到错误:

解析规则 Host(

localhost
) && PathRegexp(
^/api/.*
) 时出错:不支持的函数:PathRegexp

docker-compose traefik
1个回答
0
投票

PathRegexp
不存在。您可以使用
Path
PathPrefix
(请参阅:https://doc.traefik.io/traefik/routing/routers/#rule

你可以使用

traefik.http.routers.api.rule=Host(`localhost`) && PathPrefix(`/api/`)
© www.soinside.com 2019 - 2024. All rights reserved.