Skip to content

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.endpointDocker 守护进程端点。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.httpClientTimeoutHTTP 客户端超时。0
providers.docker.tls.caCA 证书路径。""
providers.docker.tls.cert客户端证书路径。""
providers.docker.tls.key客户端私钥路径。""
providers.docker.tls.insecureSkipVerify跳过 TLS 验证。false
providers.providersThrottleDurationProvider 事件节流时长。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 的商业支持。

基于 MIT 协议发布