为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

LEATH 2022-11-11 13:34:53
我想将 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 buildRUN mkdir -p /usr/src/app# copy the react app to the containerWORKDIR /usr/src/appCOPY . /usr/src/appCOPY package.json /usr/src/app# adding env variableARG REACT_APP_FLASK_APIENV REACT_APP_FLASK_API "api address"# prepare the container for building reactRUN npm installRUN npm run build #node --expose-gc --max-old-space-size=1024 node_modules/react-scripts/scripts/build.js# preprare nginxFROM nginx:alpineCOPY --from=build /usr/src/app/build /usr/share/nginx/htmlRUN rm /etc/nginx/conf.d/default.confCOPY nginx/nginx.conf /etc/nginx/conf.d# fire up nginxEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

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

我会说这个容量对于应用程序运行时(nginx)来说已经足够了。

但是对于应用程序构建npm run build)来说,这永远不够。

根据经验,我们负责构建 400 多个计划,并且可以为一些react/angular 项目npm build占用高达16G的内存。

解决方法

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

  • 在您的机器中构建映像。

  • 将构建的镜像复制到 ec2 实例。

  • 运行 ec2 实例中的图像。

在你的笔记本电脑中

# build it

docker build -t frontend:v1.0 -f react.Dockerfile .


# save the image as simple file

docker save frontend:v1.0 | gzip > frontend.tar.gz


# copy the file to your ec2 machine


scp frontend.tar.gz ec2-user@x.x.x.x:/tmp


在您的 ec2 实例中


# load the simple file into an image

docker load < /tmp/frontend.tar.gz


# validate that the image is loaded

docker images


不能帮助更多!祝你好运


查看完整回答
反对 回复 2022-11-11
?
千巷猫影

TA贡献1829条经验 获得超7个赞

我在 macOS Big Sur 上遇到了同样的问题,解决这个问题的唯一方法是像这样设置 docker Preferences

//img1.sycdn.imooc.com//636ddf2b0001a78e12370643.jpg

所有资源必须完全填满



查看完整回答
反对 回复 2022-11-11
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信