我正尝试通过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"]
我不知道哪里可能出问题了。
因此,我们将不胜感激。
我能够对挂接内的容器执行kubectl exec -it pod_name-bash。由于某种原因,我发现“ App.js”文件已作为“ app.js”复制到容器中。由于linux区分大小写,因此它无法找到该文件。更改index.js中的import语句可解决此问题。但是我仍然不知道是什么原因导致文件被小写复制,因为在我的本地文件以“ App.js”形式存在。
答案 0 :(得分:1)
当您将部署过程调整为更适合生产的设置时,您所遇到的问题将被忽略。
您当前正在做的是在每个Kubernetes节点上安装所有(开发)依赖项,编译您的应用程序,然后启动开发Web服务器。这会使您部署的内部版本不一致,并增加部署节点上的负载和膨胀。
相反,您要做的是通过在构建计算机上运行npm run build
来创建可用于生产的构建,该构建计算机将编译您的应用程序并输出到项目中的build
文件夹中。然后,您想将此文件夹以.zip
文件的形式传输到服务器,这将需要安装可用于生产环境的Web服务器(强烈建议使用Nginx,并且是行业标准),以便从内部版本中生成静态文件。