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

MRSK部署Hello World应用成功但Traefik返回404求助

解决MRSK部署后Traefik流量无法转发到Rails应用的思路

以下是针对Traefik返回404、流量未到达Rails应用的排查与解决方向:

1. 确认应用容器的Traefik标签是否正确生成

MRSK依赖Traefik自动发现机制,需要应用容器带有正确的Traefik标签。执行以下命令检查应用容器的标签:

docker inspect home-web-HEAD_uncommitted_9594873ea15b59f4 | grep -A 20 "Labels"

正常情况下应该包含类似以下标签:

  • traefik.enable=true
  • traefik.http.routers.<service-name>-web.rule=Host(你的部署域名)
  • traefik.http.services.<service-name>-web.loadbalancer.server.port=3000

如果缺少这些标签,检查config/deploy.yml中的配置,确保service名称、域名等参数正确,重新执行mrsk deploy更新配置。

2. 验证Traefik是否识别到应用服务

可以通过Traefik仪表盘查看路由和服务状态:

  1. 修改config/deploy.yml中的Traefik配置,添加仪表盘启用参数:
traefik:
  command:
    - "--api.insecure=true"
    - "--api.dashboard=true"
  1. 重启Traefik:
mrsk traefik restart
  1. 访问http://你的服务器IP:8080/dashboard,检查是否存在对应应用的路由和服务条目。如果没有,说明Traefik未发现应用容器,回到标签检查步骤。

3. 修正Rails服务器的绑定地址

Rails默认rails server命令在生产环境会绑定localhost,导致容器外部(包括Traefik)无法访问。修改Dockerfile中的启动命令,强制绑定所有网卡:

CMD ["./bin/rails", "server", "-b", "0.0.0.0"]

重新构建并部署:

mrsk deploy

4. 测试容器间的连通性

  • 测试应用容器内部服务可用性:
docker exec -it home-web-HEAD_uncommitted_9594873ea15b59f4 curl http://localhost:3000

如果返回应用内容,说明服务本身正常;如果返回Rails的404,检查路由配置。

  • 测试Traefik容器能否访问应用容器:
docker exec -it traefik curl http://home-web-HEAD_uncommitted_9594873ea15b59f4:3000

如果无法访问,检查两个容器是否在同一网络:

docker inspect traefik | grep "NetworkMode"
docker inspect home-web-HEAD_uncommitted_9594873ea15b59f4 | grep "NetworkMode"

MRSK默认会创建mrsk共享网络,确保两者都使用该网络。

5. 检查MRSK部署配置的完整性

确认config/deploy.yml核心配置正确,示例如下:

service: home
image: home/testrepo
servers:
  - mrsk-test-3
traefik:
  public_network: true

确保service名称与容器命名前缀一致,traefik.public_network设为true以启用容器自动发现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:23:10