docker 启动 traefik 可自动发现微服务并路由,通过容器 labels 声明规则,无需重启;需挂载 /var/run/docker.sock,启用 docker provider,配置 tls 自动签发证书,并支持中间件、健康检查与 websocket。

直接用 Docker 启动 Traefik,配合容器标签(labels)声明路由规则,就能实现微服务流量的自动发现与路由——无需改配置、不重启、部署即生效。
基础环境准备
确保已安装 Docker 和 docker-compose。Traefik 依赖 /var/run/docker.sock 监听容器事件,所以必须挂载该套接字。
- 拉取最新稳定版镜像:
docker pull traefik:v3.5 - 创建
docker-compose.yml,定义 Traefik 服务并启用 Docker provider - 开放三个端口:80(HTTP)、443(HTTPS)、8080(Dashboard)
- 关键参数不能漏:
--providers.docker=true和--providers.docker.exposedByDefault=false,后者可避免所有容器被默认暴露
用 labels 声明路由规则
在你的微服务容器(比如 API 或前端)的 docker-compose.yml 中添加 traefik 标签,它就是你的“路由说明书”。
-
traefik.http.routers.myapi.rule=Host(`api.example.com`) && PathPrefix(`/v1`)—— 指定域名+路径匹配 -
traefik.http.services.myapi.loadbalancer.server.port=8080—— 告诉 Traefik 后端服务监听哪个端口 -
traefik.http.routers.myapi.tls=true—— 自动启用 HTTPS(需配合证书解析器) - 多个服务只需各自加标签,Traefik 启动后会自动识别、建路由、做负载均衡
自动 HTTPS 与证书管理
启用 Let's Encrypt 只需两步:配置证书解析器 + 在路由中开启 TLS,全程无手动证书操作。
- 在 Traefik 静态配置(如
traefik.yml)中定义certificatesResolvers.letsencrypt.acme,指定邮箱和acme.json存储路径 -
acme.json权限必须为600(chmod 600 acme.json),否则证书申请失败 - 给路由加
traefik.http.routers.myapp.tls.certresolver=letsencrypt,Traefik 就会自动申请、续期证书 - 支持通配符域名(如
*.example.com),但需使用 DNS-01 挑战方式
进阶控制:中间件与健康检查
路由生效后,还能通过中间件(Middleware)增强能力,比如限流、重写、鉴权,全部通过标签或独立配置文件定义。
- 路径重写:
traefik.http.middlewares.strip-api.stripprefix.prefixes=/api,再绑定到路由:traefik.http.routers.myapi.middlewares=strip-api - 速率限制:
traefik.http.middlewares.rate-limit.ratelimit.average=100,单位是请求/秒 - 健康检查:Traefik 默认对服务做 HTTP GET 健康探测;可自定义路径与超时,失败实例自动从负载均衡池剔除
- WebSocket 支持开箱即用,只要后端服务正确响应
Upgrade: websocket,无需额外配置











