跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何使用Docker容器部署高性能的反向代理Traefik

使用Docker容器部署Traefik是最轻量且贴近生产的方式,依赖Docker 20.10+、Docker Compose v2.20+,需开放80/443端口、挂载docker.sock、配置traefik.yml与acme.json,并通过标签自动发现后端服务。 直接用 Docker 容器部署 Traefik 是最轻量、最贴近生产的方式。它不依赖系统级安装,配置集中,启动快,天然适配容器编排环境。 准备基础运行环境 确保宿主机已安装: Docker 20.10 或更高版本(推荐 24.x) Docker Compose v2.20+(建议使用
docker compose
命令而非旧版
docker-compose
) 开放 TCP 端口 80 和 443(HTTPS 必需),如为云服务器需同步配置安全组
/var/run/docker.sock
可被容器读取(Traefik 需监听 Docker 事件实现自动发现) 创建最小可行配置 新建目录(如
traefik-prod
),放入以下两个核心文件: traefik.yml(静态配置)
entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https websecure: address: ":443"

providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false # 关键:避免意外暴露所有容器 file: filename: /dynamic.yml

api: dashboard: true insecure: false # 生产中禁用非加密 API 访问

certificatesResolvers: letsencrypt: acme: email: admin@example.com storage: /acme.json httpChallenge: entryPoint: web

acme.json(证书存储) :空 JSON 文件,执行
touch acme.json && chmod 600 acme.json
设置权限 编写 docker -compose.yml 启动服务 该配置启用 Dashboard(仅限内网访问)、自动 HTTPS、Docker 服务发现: Trae 字节跳动推出的AI编程IDE工具 下载
version: "3.8" services: traefik: image: traefik:v3.0 container_name: traefik restart: unless-stopped ports: - "80:80" - "443:443" - "8080:8080" # Dashboard,建议后续通过域名+Basic Auth 保护 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik.yml:/etc/traefik/traefik.yml:ro - ./acme.json:/acme.json - ./dynamic.yml:/dynamic.yml:ro command: - "--log.level=INFO" - "--accesslog=true"
运行
docker compose up -d
即可启动。Dashboard 默认可通过
http://localhost:8080/dashboard/
访问(首次需配置 hosts 或本地 DNS 指向)。 让后端服务自动接入 无需改 Traefik 配置——只需在其他服务的
docker-compose.yml
中添加标签:
services: myapp: image: nginx:alpine labels: - "traefik.enable=true" - "traefik.http.routers.myapp.rule=Host(`app.example.com`)" - "traefik.http.routers.myapp.tls.certresolver=letsencrypt" - "traefik.http.routers.myapp.entrypoints=websecure"
Traefik 会实时监听容器启停,自动注册路由、申请并续期证书。只要 DNS A 记录指向宿主机 IP,
app.example.com
就能直接 HTTPS 访问。 不复杂但容易忽略:Dashboard 端口暴露在公网有风险,上线前务必加 Basic Auth 或限制 IP;acme.json 权限必须是 600;Docker socket 挂载是自动发现的前提,不可省略。

相关文章