如何通过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
相关产品推荐
相关产品推荐

