我正在尝试做的事情:
我有一个 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
PathRegexp
不存在。您可以使用 Path
或 PathPrefix
(请参阅:https://doc.traefik.io/traefik/routing/routers/#rule)
你可以使用
traefik.http.routers.api.rule=Host(`localhost`) && PathPrefix(`/api/`)