Traefik Edge router and proxy
Light · Postcard
102 × 152 mm · PDF
Dark · Postcard
102 × 152 mm · PDF
Ink saver · Postcard
102 × 152 mm · PDF
Light · A4 landscape
297 × 210 mm · PDF
Dark · A4 landscape
297 × 210 mm · PDF
Ink saver · A4 landscape
297 × 210 mm · PDF
Light · A3 landscape
420 × 297 mm · PDF
Dark · A3 landscape
420 × 297 mm · PDF
Ink saver · A3 landscape
420 × 297 mm · PDF
Start here
traefik --configFile=<file>
--providers.docker=true
--entryPoints.web.address=:80
--api.dashboard=true
traefik.http.routers.<r>.rule
traefik.http.services.<s>.loadbalancer.server.port
Host(`a.example.com`)
traefik healthcheck
Concepts
- EntryPoint port :80 / :443
- Router rule + priority
- Middlewares auth, redirect, headers
- Service load balancer
- Backend container / server
Run and static config
traefik --configFile=<file>
traefik
--entryPoints.<name>.address=<addr>
traefik --providers.docker=true
traefik --providers.file.directory=<dir>
traefik --api.dashboard=true
traefik --log.level=DEBUG
traefik --providers.docker.exposedByDefault=false
traefik --providers.file.watch=true
Docker labels
traefik.enable=true
traefik.http.routers.<r>.rule=Host(`<host>`)
traefik.http.routers.<r>.entrypoints=<ep>
traefik.http.services.<s>.loadbalancer.server.port=<port>
traefik.http.routers.<r>.tls=true
traefik.http.routers.<r>.tls.certresolver=<res>
traefik.http.routers.<r>.middlewares=<m>
traefik.docker.network=<net>
traefik.http.services.<s>.loadbalancer.healthcheck.path=<path>
traefik.http.middlewares.<m>.<type>.<opt>=<val>
Router rules
Host(`<domain>`)
PathPrefix(`/<prefix>`)
Path(`/<path>`)
Host(`a`) && PathPrefix(`/api`)
Host(`a`) || Host(`b`)
HostRegexp(`^[a-z]+\.example\.com$`)
ClientIP(`10.0.0.0/8`)
| Case | Result |
|---|---|
| Default | Longer rule string wins |
| priority: <n> | Higher number wins |
| Same priority | Provider order decides |
| Wildcard Host | Matches one label only |
Middlewares
redirectscheme.scheme=https
stripprefix.prefixes=/<prefix>
basicauth.users=<user>:<hash>
ratelimit.average=<n>
ipallowlist.sourcerange=<cidr>
forwardauth.address=<url>
TLS and ACME
--certificatesresolvers.<res>.acme.email=<addr>
--certificatesresolvers.<res>.acme.storage=<file>
--certificatesresolvers.<res>.acme.tlschallenge=true
--certificatesresolvers.<res>.acme.httpchallenge.entrypoint=web
--certificatesresolvers.<res>.acme.dnschallenge.provider=<p>
--certificatesresolvers.<res>.acme.caserver=<url>
--entryPoints.web.http.redirections.entryPoint.to=websecure
File provider
http.routers.<r>.rule
http.routers.<r>.service
http.services.<s>.loadBalancer.servers[].url
api@internalHealth and debugging
traefik healthcheck
--ping=truecurl http://localhost:8080/api/rawdata
Recipes
services: traefik: image: traefik:v3.7 command: - --providers.docker.exposedByDefault=false - --entryPoints.web.address=:80 - --entryPoints.websecure.address=:443 - --certificatesresolvers.le.acme.tlschallenge=true - --certificatesresolvers.le.acme.email=me@example.com - --certificatesresolvers.le.acme.storage=/le/acme.json ports: ["80:80", "443:443"] volumes: - /var/run/docker.sock:/var/run/docker.sock:ro
labels: - traefik.enable=true - traefik.http.routers.app.rule=Host(`app.example.com`) - traefik.http.routers.app.entrypoints=websecure - traefik.http.routers.app.tls.certresolver=le - traefik.http.services.app.loadbalancer.server.port=8080
entryPoints: web: address: :80 http: redirections: entryPoint: {to: websecure} websecure: address: :443providers: file: {directory: /etc/traefik/dynamic, watch: true}api: {dashboard: true}
http: routers: app: rule: Host(`app.example.com`) service: app tls: {certResolver: le} services: app: loadBalancer: servers: - url: http://127.0.0.1:8080



