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

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

Docker 为 Flask API 创建并运行映像,但是,当构建 React 应用程序时,它会因Javascript heap out of memory而崩溃。

我尝试运行:

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

来自 Dockerfile,但是当我从 docker-compose 构建它时,它永远不会完成npm run 构建并保持库存。

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

这是我的 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

我的反应应用程序 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;"]


LEATH
浏览 289回答 2
2回答

元芳怎么了

问题的根本原因是 VM t2.micro 的弱点。t2.micro 只有 1 个 vCPU 和 1GB 内存我会说这个容量对于应用程序运行时(nginx)来说已经足够了。但是对于应用程序构建(npm run build)来说,这永远不够。根据经验,我们负责构建 400 多个计划,并且可以为一些react/angular 项目npm build占用高达16G的内存。解决方法如果您不想花钱打开更大的 VM(实例),这是解决方法:在您的机器中构建映像。将构建的镜像复制到 ec2 实例。运行 ec2 实例中的图像。在你的笔记本电脑中# build itdocker build -t frontend:v1.0 -f react.Dockerfile .# save the image as simple filedocker save frontend:v1.0 | gzip > frontend.tar.gz# copy the file to your ec2 machinescp frontend.tar.gz ec2-user@x.x.x.x:/tmp在您的 ec2 实例中# load the simple file into an imagedocker load < /tmp/frontend.tar.gz# validate that the image is loadeddocker images不能帮助更多!祝你好运

千巷猫影

我在 macOS Big Sur 上遇到了同样的问题,解决这个问题的唯一方法是像这样设置 docker Preferences所有资源必须完全填满
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript