Traefik Docker Provider 文档
Traefik 与 Docker
如果你还没有阅读过 快速开始指南,该指南使用 Docker Provider 来演示 Traefik 的核心用法。
配置示例
启用 Docker Provider
YAML 格式:
yaml
providers:
docker: {}TOML 格式:
toml
[providers.docker]CLI 格式:
bash
--providers.docker=true为容器附加标签(在 Docker Compose 中)
yaml
services:
my-container:
# ...
labels:
- traefik.http.routers.my-container.rule=Host(`example.com`)配置选项
| 选项 | 描述 | 默认值 |
|---|---|---|
providers.docker.endpoint | Docker 守护进程端点。 | unix:///var/run/docker.sock |
providers.docker.username | 认证用户名。 | "" |
providers.docker.password | 认证密码。 | "" |
providers.docker.useBindPortIP | 使用绑定端口的 IP 地址作为后端服务器 URL。 | false |
providers.docker.network | 用于连接服务的 Docker 网络。 | - |
providers.docker.defaultRule | 容器没有显式路由规则时使用的默认规则。 | Host({{ normalize .Name }}) |
providers.docker.exposedByDefault | 默认为所有容器暴露。 | true |
providers.docker.constraints | 过滤匹配容器(如 Label(...))。 | "" |
providers.docker.watch | 监听 Docker 事件。 | true |
providers.docker.httpClientTimeout | HTTP 客户端超时。 | 0 |
providers.docker.tls.ca | CA 证书路径。 | "" |
providers.docker.tls.cert | 客户端证书路径。 | "" |
providers.docker.tls.key | 客户端私钥路径。 | "" |
providers.docker.tls.insecureSkipVerify | 跳过 TLS 验证。 | false |
providers.providersThrottleDuration | Provider 事件节流时长。 | 2s |
重要选项说明
- exposedByDefault:建议设置为
false,然后只对需要公开的容器使用traefik.enable=true标签。 - network:当 Traefik 容器与其它容器使用不同网络时,需要指定。
- defaultRule:当容器没有显式规则时,Traefik 使用此规则。
适用场景
- 单机 Docker:直接使用 Docker 部署
- Docker Compose:使用 Compose 文件管理多容器应用
- 开发环境:在本地开发环境中使用 Traefik 代理
典型使用
- 在 Compose 文件中为容器添加
traefik.enable=true标签启用发现 - 使用
traefik.http.routers.<name>.rule定义路由规则 - 使用
traefik.http.services.<name>.loadbalancer.server.port定义后端服务端口 - 使用
traefik.http.routers.<name>.tls=true启用 TLS - 使用
traefik.http.middlewares.<name>.*定义中间件
完整示例
yaml
services:
traefik:
image: traefik:v3.7
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "80:80"
- "443:443"
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
networks:
- web
whoami:
image: traefik/whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls=true"
networks:
- web
networks:
web:
name: web在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。