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

无法使用Traefik为React天气应用实现HTTP域名路由

问题排查与修复方案

核心问题

你的whoami、nginx能正常通过Traefik路由,是因为它们默认监听容器内的80端口,Traefik会自动探测这个端口;但React天气应用用的是3000端口,Traefik没法自动识别,导致请求转发失败。另外还要确认应用是否监听容器的所有网卡(0.0.0.0),不然Traefik连不上容器里的服务。

具体修复步骤

1. 给Traefik添加端口转发配置

在weather服务的labels里新增两行配置,明确告诉Traefik把请求转发到容器的3000端口:

labels:
  - "traefik.enable=true"
  - "traefik.docker.network=traefik-public"
  - "traefik.http.routers.weather.rule=Host(`weather.localhost`)"
  - "traefik.http.routers.weather.entrypoints=web"
  # 新增以下两行
  - "traefik.http.services.weather.loadbalancer.server.port=3000"
  - "traefik.http.services.weather.loadbalancer.server.scheme=http"

2. 确保React应用监听0.0.0.0

默认情况下React开发服务器只监听127.0.0.1,容器外部(包括Traefik)无法访问。修改package.json的start脚本:

"scripts": {
  "start": "HOST=0.0.0.0 PORT=3000 react-scripts start"
}

或者在Dockerfile中添加环境变量:

ENV HOST 0.0.0.0
ENV PORT 3000

3. 移除不必要的端口映射(可选)

Swarm模式下Traefik通过内部网络与服务通信,不需要将容器的3000端口映射到主机,直接删除weather服务中的ports: - 3000:3000配置,避免端口冲突。

4. 重新部署服务

更新配置后重新部署Swarm服务:

docker stack deploy -c docker-compose.yml <你的栈名称>

5. 验证Traefik路由状态

打开Traefik的dashboard(localhost:8080),查看weather路由和服务是否正常注册,确认没有错误提示。

额外检查点

  • 确认traefik-public网络在Swarm中存在,且所有服务都正确加入该网络
  • 查看Traefik日志排查连接错误:
docker service logs <traefik服务名称>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:43:17