Отрезание префикса в Docker
Отрезание префикса убирает папку из адреса, прежде чем запрос попадёт в контейнер.
Браузер по-прежнему открывает /api
в строке, а whoami получает путь без этой папки.
Так один и тот же образ отвечает на корень, а снаружи адрес остаётся с префиксом.
Правило PathPrefix(`/api`) && Host(`site.localhost`)
ограничивает маршрут, посредник cut
с prefixes=/api
вешают на роутер api.
Сервис whoami
без ports
и прокси в одном описании:
services:
proxy:
image: traefik:3
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
whoami:
image: traefik/whoami
labels:
- traefik.enable=true
- traefik.http.middlewares.cut.stripprefix.prefixes=/api
- traefik.http.routers.api.rule=PathPrefix(`/api`) && Host(`site.localhost`)
- traefik.http.routers.api.middlewares=cut
Запуск в фоне:
docker compose up -d
По адресу http://site.localhost/api
текст whoami показывает путь, который видит контейнер.
Папка /api
в этом пути не повторяется: контейнер видит путь без /api.
Опишите сервис echo на traefik/whoami с префиксом /v1, хостом echo.localhost, посредником trim и полным прокси в том же файле.
Откройте http://echo.localhost/v1 и по тексту whoami убедитесь, что внутри контейнера путь без /v1.