Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在docker容器中构建react应用程序时JavaScript内存不足_Javascript_Reactjs_Amazon Ec2_Docker Compose_Dockerfile - Fatal编程技术网

在docker容器中构建react应用程序时JavaScript内存不足

在docker容器中构建react应用程序时JavaScript内存不足,javascript,reactjs,amazon-ec2,docker-compose,dockerfile,Javascript,Reactjs,Amazon Ec2,Docker Compose,Dockerfile,我想将React/Flask应用程序部署到AWS EC2 t2.micro实例中。我得到了一个docker compose文件以及React和Flask的相应docker文件 Docker为Flask API创建并运行映像,但是,在构建React应用程序时,它会因内存不足而崩溃 我试着跑步: 运行节点--expose gc--max old space size=1024 node_modules/react scripts/scripts/build.js 从docker文件,但当我从dock

我想将React/Flask应用程序部署到AWS EC2 t2.micro实例中。我得到了一个docker compose文件以及React和Flask的相应docker文件

Docker为Flask API创建并运行映像,但是,在构建React应用程序时,它会因内存不足而崩溃

我试着跑步:

运行节点--expose gc--max old space size=1024 node_modules/react scripts/scripts/build.js

从docker文件,但当我从docker compose构建它时,它永远不会完成npm运行构建并保持库存

我也尝试添加模块增加内存限制,但都没有完成

这是我的docker-compose.yml:

version: '3.5'
services:
        frontend:
                container_name: frontend
                build:
                        context: ./frontend
                        dockerfile: Dockerfile
                ports:
                        - 80:80
                        - 443:443
                env_file: 
                        - ./frontend/.env
                environment: 
                        - REACT_APP_FLASK_API= "api address"
        api:
                restart: always
                container_name: api
                build:
                        context: ./api
                        dockerfile: Dockerfile
                expose:
                        - 5000
                environment:
                        - FLASK_ENV=development
                        - FLASK_APP=app.py
                        - FLASK_DEBUG=1
我的React应用程序Dockerfile:

FROM node:latest as build
RUN mkdir -p /usr/src/app

# copy the react app to the container
WORKDIR /usr/src/app
COPY . /usr/src/app
COPY package.json /usr/src/app

# adding env variable
ARG REACT_APP_FLASK_API
ENV REACT_APP_FLASK_API "api address"

# prepare the container for building react
RUN npm install
RUN npm run build #node --expose-gc --max-old-space-size=1024 node_modules/react-scripts/scripts/build.js

# preprare nginx
FROM nginx:alpine
COPY --from=build /usr/src/app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
# fire up nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
FROM python:3.6.10

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app
RUN pip install -r requirements.txt

COPY app.py /usr/src/app
COPY Complements /usr/src/app/Complements

ENTRYPOINT [ "flask" ]
CMD ["run", "--host=0.0.0.0", "--port=5000"]
还有我的烧瓶Dockerfile:

FROM node:latest as build
RUN mkdir -p /usr/src/app

# copy the react app to the container
WORKDIR /usr/src/app
COPY . /usr/src/app
COPY package.json /usr/src/app

# adding env variable
ARG REACT_APP_FLASK_API
ENV REACT_APP_FLASK_API "api address"

# prepare the container for building react
RUN npm install
RUN npm run build #node --expose-gc --max-old-space-size=1024 node_modules/react-scripts/scripts/build.js

# preprare nginx
FROM nginx:alpine
COPY --from=build /usr/src/app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
# fire up nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
FROM python:3.6.10

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY requirements.txt /usr/src/app
RUN pip install -r requirements.txt

COPY app.py /usr/src/app
COPY Complements /usr/src/app/Complements

ENTRYPOINT [ "flask" ]
CMD ["run", "--host=0.0.0.0", "--port=5000"]

问题的根本原因是VM t2.micro的弱点

t2.micro只有1个vCPU和1GB内存

我想说,这个容量足以满足应用程序运行时(nginx)的需要

但是对于应用程序构建
npm运行构建
)来说,这永远都是不够的

根据经验,我们负责构建400多个计划,
npm build
对于一些react/angular项目可以占用16G内存

变通办法 如果您不想花钱打开更大的VM(实例),这是一个解决方法:

  • 在计算机中生成映像
  • 将生成的映像复制到ec2实例
  • 在ec2实例中运行映像
在笔记本电脑中

#构建它
docker构建-t前端:v1.0-f react.Dockerfile。
#将图像另存为简单文件
docker保存前端:v1.0 | gzip>frontend.tar.gz
#将文件复制到ec2机器上
scp frontend.tar.gz ec2-user@x.x.x.x:/tmp
在您的ec2实例中

#将简单文件加载到图像中
码头装卸工负载

情不自禁!祝你好运

非常感谢。我想从我的电脑上运行npm运行build,然后将静态文件复制到Dockerfile中,但你的解决方案要好得多。再次感谢你!!欢迎@BrianNieto!