You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Traefik配置文件重定向Docker已有容器至对应子域名?

当然可以!完全不用Docker Compose,也不用改动你现有的容器,直接通过Traefik的配置文件就能实现子域名反向代理的需求。我给你一步步拆解配置步骤:

1. 先获取你的App容器IP

Traefik要直接转发请求到容器,得知道容器的内部IP。运行下面的命令分别查看两个App的容器IP:

# 查看App A的容器IP
docker inspect <app-a-container-name/id> | grep -A 2 "IPAddress"

# 查看App B的容器IP
docker inspect <app-b-container-name/id> | grep -A 2 "IPAddress"

你会得到类似"IPAddress": "172.17.0.2"的结果,把这两个IP记下来备用。

2. 编写Traefik静态配置文件 traefik.toml

这个文件是Traefik启动时加载的核心配置,放在你Traefik二进制文件所在的目录:

# 全局配置:关闭版本检查和匿名数据上报
[global]
  checkNewVersion = false
  sendAnonymousUsage = false

# 日志配置:排错时可以改成DEBUG级别
[log]
  level = "INFO"

# 可选:启用Traefik仪表盘,方便查看路由状态
[api]
  dashboard = true
  insecure = true # 生产环境建议关闭,改用BasicAuth等认证方式

# 定义入口点:监听主机的80端口处理HTTP请求
[entryPoints]
  [entryPoints.web]
    address = ":80"

# 文件提供者:加载动态路由规则,支持热重载
[providers.file]
  filename = "./dynamic.toml"
  watch = true # 配置文件修改后自动生效,无需重启Traefik

3. 编写动态路由配置文件 dynamic.toml

和traefik.toml放在同一目录,用来定义子域名和容器的映射规则:

[http]
  # App A的路由规则:匹配appa.domain.com
  [http.routers.appa-router]
    rule = "Host(`appa.domain.com`)"
    entryPoints = ["web"]
    service = "appa-backend"

  # App A的后端服务:指向你刚才获取的容器IP和端口
  [http.services.appa-backend.loadBalancer]
    [[http.services.appa-backend.loadBalancer.servers]]
      url = "http://172.17.0.2:3001" # 替换成你的App A容器IP

  # App B的路由规则:匹配appb.domain.com
  [http.routers.appb-router]
    rule = "Host(`appb.domain.com`)"
    entryPoints = ["web"]
    service = "appb-backend"

  # App B的后端服务:指向你的App B容器IP和端口
  [http.services.appb-backend.loadBalancer]
    [[http.services.appb-backend.loadBalancer.servers]]
      url = "http://172.17.0.3:3002" # 替换成你的App B容器IP

4. 配置域名解析

  • 如果是公网使用:把appa.domain.com和appb.domain.com都解析到运行Traefik的主机的公网IP。
  • 如果是本地测试:修改你的hosts文件(Linux/macOS是/etc/hosts,Windows是C:\Windows\System32\drivers\etc\hosts),添加两行:
    127.0.0.1 appa.domain.com
    127.0.0.1 appb.domain.com
    

5. 启动Traefik

在Traefik二进制文件所在目录,直接运行你指定的命令:

./traefik --configFile=traefik.toml

现在访问appa.domain.com就会自动转发到你的App A,appb.domain.com转发到App B,完全不用动你现有的容器!

内容的提问来源于stack exchange,提问作者Geeek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:45:52