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=truetraefik.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仪表盘查看路由和服务状态:
- 修改
config/deploy.yml中的Traefik配置,添加仪表盘启用参数:
traefik: command: - "--api.insecure=true" - "--api.dashboard=true"
- 重启Traefik:
mrsk traefik restart
- 访问
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
相关产品推荐
相关产品推荐

