使用docker compose结合traefik可实现零配置热更新反向代理:traefik通过挂载docker.sock监听容器事件,依labels自动路由;微服务只需声明traefik.enable、host规则、端口及tls等标签;https需配置let’s encrypt证书解析器并绑定;中间件支持路径裁剪、限流、http重定向与健康检查。

用 Docker Compose 结合 Traefik 实现自动反向代理,核心是让 Traefik 直接监听 Docker 守护进程,通过容器标签(labels)声明路由规则,整个过程无需改配置、不重启服务,部署即生效。
Traefik 服务必须正确启用 Docker Provider
Traefik 要自动发现容器,得靠 Docker provider 实时监听 /var/run/docker.sock。在 Traefik 的 docker-compose.yml 中必须包含以下关键配置:
- 挂载
/var/run/docker.sock:/var/run/docker.sock:ro—— 这是通信基础,缺了就无法感知容器启停 - 启用 provider:
--providers.docker=true - 关闭默认暴露:
--providers.docker.exposedByDefault=false—— 防止所有容器被意外暴露,安全更可控 - 开放必要端口:80(HTTP)、443(HTTPS)、8080(Dashboard,默认需加认证)
微服务容器用 labels 声明路由规则
你的 API、前端或其他服务容器,只需在自己的 docker-compose.yml 里加几行 labels,就是完整的“路由说明书”:
-
traefik.enable=true—— 显式启用 Traefik 管理 -
traefik.http.routers.myapp.rule=Host(`app.example.com`)—— 按域名匹配 -
traefik.http.routers.myapp.rule=Host(`api.example.com`) && PathPrefix(`/v1`)—— 支持多条件组合 -
traefik.http.services.myapp.loadbalancer.server.port=3000—— 指定容器内实际监听端口 -
traefik.http.routers.myapp.tls=true—— 启用 HTTPS(配合证书解析器才生效)
自动 HTTPS 需配证书解析器并绑定到路由
Let’s Encrypt 免费证书不是开箱即用,要两步走:
- 在 Traefik 静态配置(如
traefik.yml)中定义certificatesResolvers.letsencrypt.acme,指定邮箱、acme.json路径,并确保该文件权限为600 - 在服务 labels 中加上:
traefik.http.routers.myapp.tls.certresolver=letsencrypt - 通配符证书(如
*.example.com)需 DNS-01 挑战,不能只靠 HTTP-01
进阶能力靠中间件(Middleware)扩展
路由建好后,还能叠加功能,全部通过 labels 或独立配置实现:
- 路径裁剪:
traefik.http.middlewares.strip-api.stripprefix.prefixes=/api,再绑定到路由:traefik.http.routers.myapp.middlewares=strip-api - 限流控制:
traefik.http.middlewares.rate-limit.ratelimit.average=100(每秒平均 100 请求) - 重定向 HTTP 到 HTTPS:
traefik.http.routers.myapp.middlewares=https-redirect+ 对应中间件定义 - 健康检查可直接开启:
traefik.http.services.myapp.loadbalancer.healthcheck.path=/health











