无法将React Application部署到Kubernetes

时间:2018-10-26 05:48:13

标签: node.js reactjs docker jenkins

我正尝试通过Docker将使用Create-React App创建的应用程序部署到Kubernetes。 当docker文件尝试使用Jenkins管道创建容器时,它失败并显示以下错误: “启动开发服务器...

无法编译。

./src/index.js

Module not found: Can't resolve './App.js' in '/app/src'

文件夹结构与默认的“创建反应应用”文件夹结构完全相似。

下面也是Dockerfile:

FROM node:10.6.0-jessie

# set working directory
RUN mkdir /app
WORKDIR /app
COPY . .

# add `/usr/src/app/node_modules/.bin` to $PATH
#ENV PATH /usr/src/app/node_modules/.bin:$PATH

RUN npm install
#RUN npm install react-scripts -g --silent

# start app
CMD ["npm", "start"]

我不知道哪里可能出问题了。

编辑1:我还想提到我可以使用此配置在本地计算机上运行docker容器。

因此,我们将不胜感激。

更新1:

我能够对挂接内的容器执行kubectl exec -it pod_name-bash。由于某种原因,我发现“ App.js”文件已作为“ app.js”复制到容器中。由于linux区分大小写,因此它无法找到该文件。更改index.js中的import语句可解决此问题。但是我仍然不知道是什么原因导致文件被小写复制,因为在我的本地文件以“ App.js”形式存在。

1 个答案:

答案 0 :(得分:1)

当您将部署过程调整为更适合生产的设置时,您所遇到的问题将被忽略。

您当前正在做的是在每个Kubernetes节点上安装所有(开发)依赖项,编译您的应用程序,然后启动开发Web服务器。这会使您部署的内部版本不一致,并增加部署节点上的负载和膨胀。

相反,您要做的是通过在构建计算机上运行npm run build来创建可用于生产的构建,该构建计算机将编译您的应用程序并输出到项目中的build文件夹中。然后,您想将此文件夹以.zip文件的形式传输到服务器,这将需要安装可用于生产环境的Web服务器(强烈建议使用Nginx,并且是行业标准),以便从内部版本中生成静态文件。