Docker部署React应用后,Kubernetes服务无法访问页面是怎么回事?
我用Docker打包了一个React应用,本地运行 docker run 能正常打开页面,但一部署到Kubernetes集群里,通过Service访问就一直报404。试过改Service类型为NodePort和LoadBalancer都不行,Ingress也配了,就是打不开。
前端代码很简单,就是一个App组件:
import React from 'react';
function App() {
return (
<div>
<h1>Hello from React!</h1>
</div>
);
}
export default App;
是不是Dockerfile或者K8s的配置哪里漏了?感觉像是路径没对上,但又不知道具体错在哪。
React应用构建后是静态文件,必须用Nginx来服务,而且Nginx必须配置SPA的路由 fallback。本地docker run能跑是因为你可能用的是开发模式或者node服务,但K8s里没配置对。
先检查你的Dockerfile,应该长这样:
关键是nginx.conf里必须加上这个:
try_files $uri $uri/ /index.html;这行是核心,它让所有不存在的路径都fallback到index.html,这样React Router才能正常工作。K8s那边基本配置对就行:
targetPort必须是80,因为Nginx监听80端口。
你本地docker run能打开说明前端代码没问题,问题就在Nginx配置这一块。加上try_files应该就能解决。