Docker部署Traefik的正确姿势,零基础也能上手
Traefik 是一个现代化的反向代理和负载均衡工具,特别适合在 Docker 环境下自动发现服务并动态配置路由。
对新手来说,用 Docker 部署 Traefik 是成本最低、最容易上手的方式。
本文按照实际操作顺序展开,每一步都给出具体命令和配置文件,你只需要复制粘贴并根据自己的环境稍作修改即可跑通。
你需要准备什么
- 一台 Linux 服务器(CentOS 7+ 或 Ubuntu 18.04+,本文以 Ubuntu 22.04 为例)。
- 已安装 Docker 和 Docker Compose。如果还没装,先执行以下命令快速安装:
curl -fsSL https://get.docker.com | bash
sudo apt-get install docker-compose-plugin -y
- 放开服务器的 80、443 和 8080 端口(如果使用云平台请在安全组放行;本地防火墙可用
ufw allow 80,443,8080/tcp)。 - 一个域名(可选) 用于配置 HTTPS 和更正规的访问,没有域名也可以先用 IP 测试。
一步步部署 Traefik(基于 Docker Compose)
1. 创建项目目录与配置文件
mkdir ~/traefik && cd ~/traefik
touch docker-compose.yml traefik.yml dynamic.yml
docker-compose.yml 定义 Traefik 容器服务,traefik.yml 是静态配置,dynamic.yml 是动态配置(路由、中间件等)。
2. 编写静态配置 traefik.yml
api:
dashboard: true
insecure: true # 仅开发环境使用,生产环境应改为 false 并配置安全认证
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
traefik:
address: ":8080"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
filename: /etc/traefik/dynamic.yml
providers.docker 允许 Traefik 自动监听容器标签来生成路由;file 提供者让我们可以手动编写额外路由规则。
3. 编写 docker-compose.yml
version: "3.8"
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/etc/traefik/traefik.yml:ro
- ./dynamic.yml:/etc/traefik/dynamic.yml:ro
networks:
- web
networks:
web:
external: false
注意:将 docker socket 挂载进去,Traefik 才能与 Docker daemon 通信。
4. 启动容器
docker compose up -d
等待几秒后,检查运行状态:
docker compose ps
如果状态正常,你已经成功用 Docker 部署了 Traefik!
验证部署并配置一个简单路由
访问 Dashboard
浏览器输入 http://你的服务器IP:8080/dashboard/(末尾斜杠不要漏),如果看到 Traefik 的 Web 管理界面,说明基础部署成功。
配置一个 HTTP 路由(通过 dynamic.yml)
在 dynamic.yml 中加入以下内容,创建一个指向 whoami 服务的路由:
http:
routers:
whoami:
rule: "Host(`whoami.local`)"
service: whoami-svc
entryPoints:
- web
services:
whoami-svc:
loadBalancer:
servers:
- url: "http://host.docker.internal:8088"
(这里假设你在另一台机器或同一机器上已运行 whoami 服务。实际使用你可以改成自己的上游服务地址。)
修改后无需重启,Traefik 会自动重新加载配置。
常见问题与避坑说明
- Dashboard 无法访问:确认端口 8080 已放行,并且启动时没有用
--api.insecure=false(我们当前配置是 true)。生产环境记得加上安全认证。 - Docker 自动发现不生效:检查
exposedByDefault: false是否导致容器被忽略。如果你想让某个容器被自动发现,需要在容器标签中设置traefik.enable=true。 - 权限问题:挂载
/var/run/docker.sock后容器内进程有 root 权限,建议在非生产环境或限制容器权限。 - 文件配置不加载:确保
traefik.yml和dynamic.yml的路径挂载正确,并且 YAML 语法无缩进错误。可用docker compose logs traefik查看错误日志。 - 端口被占用:如果 80 或 443 已被其他 Web 服务占用,先停掉它们再启动 Traefik,或者修改 entryPoints 端口。
如果你正在处理 Docker 部署 Traefik,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
跟着操作下来,你已经拥有一个可动态扩缩的反向代理系统了。