Docker容器中Strapi构建时Webpack进程卡住问题求解
可行解决方案
- 调整Node.js内存上限
Node默认的内存分配阈值低于容器分配的4GB,会触发频繁的垃圾回收甚至内存溢出,导致构建卡住。将Dockerfile中RUN yarn build修改为:
RUN NODE_OPTIONS="--max-old-space-size=3072" yarn build
预留1GB内存给系统进程,避免资源抢占。
- 优化构建上下文减少IO开销
在项目根目录新增.dockerignore文件,排除不需要复制到容器的冗余文件,降低SSD读取压力:
node_modules .cache build .git .env .DS_Store *.log
- 更换基础镜像避免依赖兼容问题
strapi/base镜像版本迭代滞后,存在旧版依赖和构建缺陷,推荐使用官方Node LTS镜像作为基础,补充必要的构建依赖即可:
FROM node:18-alpine WORKDIR /srv/app # 安装Strapi构建所需的系统依赖 RUN apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash COPY ./package.json ./ COPY ./yarn.lock ./ RUN yarn install --production --frozen-lockfile COPY . . ENV NODE_ENV production RUN NODE_OPTIONS="--max-old-space-size=3072" yarn build EXPOSE 1337 CMD ["yarn", "start"]
- 关闭Webpack冗余构建项
在Strapi项目config/webpack.config.js中添加配置,关闭生产环境sourcemap生成,大幅降低资源处理阶段的计算和IO消耗:
module.exports = ({ env }) => ({ build: { sourcemaps: false, } })
- 优化Docker构建环境
如果使用Docker Desktop(Windows/macOS),开启BuildKit构建加速,执行构建命令前添加环境变量:DOCKER_BUILDKIT=1 docker build -t your-strapi-image .
Windows用户可将项目放到WSL2文件系统内执行构建,避免跨系统文件挂载的IO性能损耗。构建阶段不要挂载本地目录到容器内的/srv/app路径,避免实时文件同步占用磁盘IO。
内容的提问来源于stack exchange,提问作者Memo
相关产品推荐
相关产品推荐

