如何在 docker-compose 上自定义 Traefik 错误页面?

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

这是我的案例,我有一个包含 2 个 docker 容器的环境:

  • Javascript应用程序
  • 特拉菲克

在构建 JS 应用程序时,容器“尚不可用”。因此 traefik 将显示 502 bad gateway 或 404 not found standard page。

有没有办法裁剪这些页面? 为了显示更加人性化的页面?

我已经挖掘了 traefik 文档,但没有成功

docker docker-compose server url-routing traefik
1个回答
0
投票

Traefik 提供错误页面中间件

https://doc.traefik.io/traefik/middlewares/http/errorpages/

错误页面应由另一个 traefik 服务提供,这是通过使用以下标签定义的:

# Dynamic Custom Error Page for 5XX Status Code
labels:
  - "traefik.http.middlewares.test-errors.errors.status=500-599"
  - "traefik.http.middlewares.test-errors.errors.service=serviceError"
  - "traefik.http.middlewares.test-errors.errors.query=/{status}.html"

这是一个基本示例,可能会帮助您实现您想要的

docker-compose.yaml

services:
  errors:
    image: nginx:alpine
    volumes:
      - ./errors.conf:/etc/nginx/conf.d/errors.conf
      - ./500.html:/usr/share/nginx/html/500.html
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.errors-service.loadbalancer.server.port=80"
      - "traefik.http.routers.errors-router.rule=Host(`error.localhost`)"
      - "traefik.http.routers.errors-router.entryPoints=web"
      - "traefik.http.middlewares.errors-middleware.errors.status=500"
      - "traefik.http.middlewares.errors-middleware.errors.service=errors-service"
      - "traefik.http.middlewares.errors-middleware.errors.query=/{status}.html"

  backend:
    image: nginx:alpine
    volumes:
      - ./backend.conf:/etc/nginx/conf.d/backend.conf
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.backend-service.loadbalancer.server.port=80"
      - "traefik.http.routers.backend-router.rule=Host(`test.localhost`)"
      - "traefik.http.routers.backend-router.entryPoints=web"
      - "traefik.http.routers.backend-router.middlewares=errors-middleware@docker"

  traefik:
    image: traefik:2.4
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 80:80
    command:
      - --accessLog=true
      - --api=true
      - --log.level=DEBUG
      - --entrypoints.web.address=:80
      - --providers.docker=true
      - --providers.docker.exposedByDefault=false
      - --providers.docker.network=default
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.traefik-service.loadBalancer.server.port=8080"
      - "traefik.http.routers.traefik-router.rule=Host(`traefik.localhost`)"
      - "traefik.http.routers.traefik-router.entryPoints=web"
      - "traefik.http.routers.traefik-router.service=api@internal"

errors.conf

server {
  listen 80 default_server;

  root /usr/share/nginx/html;

  location / {
    try_files $uri =500;
  }
}

backend.conf

server {
  listen 80 default_server;

  root /usr/share/nginx/html;

  location / {
    return 500;
  }
}

500.html

<h1>This is broken - HTTP 500 SERVER ERROR</h1>
© www.soinside.com 2019 - 2024. All rights reserved.