使用Docker标签时Traefik自定义错误页面

时间:2018-04-05 13:15:50

标签: docker traefik

Traefik的更高版本支持自定义错误页面 - 如果出现错误,可以将请求发送到其他后端。通常,当反向代理无法与应用程序服务器通信时,这是502。 This文档页面介绍了如何使用file后端类型执行此操作,这非常有效。

但是,我正在尝试使用Docker后端。 This文档页面显示了一个预期的Docker配置 - 虽然不清楚<name>替换应该是什么意思。

所以,使用Docker Compose,我有一个基本设置,我希望将所有HTTP 500-599流量定向到备用后端,称为error。这是我在docker-compose.yml中得到的:

version: '2'
services:
  traefik:
    image: traefik
    ports:
      - "80:80"
      - "8080:8080"
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./acme:/etc/traefik/acme/
      - ./traefik.toml:/etc/traefik/traefik.toml
  hello:
    image: kitematic/hello-world-nginx
    ports: 
      - "80"
    labels:
      - traefik.backend=hello
      - traefik.port=801
      - traefik.frontend.rule=Host:localhost
      - traefik.enable=true
      - traefik.frontend.errors.network.status=["500-599"]
      - traefik.frontend.errors.network.backend="error"
      - traefik.frontend.errors.network.query="/500s.html"
  error:
    image: kitematic/hello-world-nginx
    ports: 
      - "80"
    volumes:
      - ./html:/website_files
    labels:
      - "traefik.backend=error"
      - "traefik.port=80"
      - "traefik.frontend.rule=Host:error.localhost"
      - "traefik.enable=true"

正如您所看到的,我在其发布的端口和Traefik正在寻找的端口之间的hello容器上存在故意的不匹配。这是为了强制502 Bad Gateway错误。

我的traefik.toml文件如下所示:

# defaultEntryPoints must be at the top because it should not be in any table below
defaultEntryPoints = ["http"]
# [accessLog]
logLevel = "DEBUG"

[web]
# Port for the status page
address = ":8080"

# Entrypoints, http and https
[entryPoints]

[entryPoints.http]
address = ":80"

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "localhost"
watch = true
exposedbydefault = true
# swarmmode = true

但是,对http://localhost的请求仍然会返回通用Bad gateway消息,而不是重定向到/500s.html容器所服务的error(通过直接转到到http://error.localhost/500s.html

感谢任何人的帮助!

1 个答案:

答案 0 :(得分:2)