部署NestJS到Google App Engine时遭遇EROFS只读文件系统错误
解决NestJS部署到Google App Engine时的EROFS只读文件系统错误
解决方案1:将构建流程移至Docker容器内
该方案通过在Docker内部完成构建,隔离Cloud Build工作区的权限限制,确保构建环境可写:
修改Dockerfile
FROM node:18-alpine WORKDIR /hello # 先复制package文件,利用Docker缓存优化构建速度 COPY package*.json ./ RUN npm install --production=false # 安装全量依赖(含devDependencies用于构建) # 复制项目源码 COPY . . # 在容器内执行Nest构建命令 RUN npm run build # 可选:清理devDependencies,减小镜像体积 RUN npm prune --production EXPOSE 3000 # 使用生产环境启动命令 CMD ["npm", "run", "start:prod"]
修改cloudbuild.yaml
移除Cloud Build中的install和build步骤,直接执行Docker构建:
steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '--tag=gcr.io/$PROJECT_ID/hello_npm', '.'] images: ['gcr.io/$PROJECT_ID/hello_npm']
解决方案2:使用GAE Flex的自动构建(无需自定义Dockerfile)
若无需自定义镜像,GAE Flex可自动处理NestJS的构建部署,步骤更简洁:
- 删除项目根目录下的
Dockerfile和cloudbuild.yaml - 修改
app.yaml,补充必要配置:
runtime: nodejs18 env: flex # 可选:配置自动扩缩容 automatic_scaling: min_num_instances: 1 max_num_instances: 2 # 设置生产环境变量 env_variables: NODE_ENV: 'production' # 路由配置 handlers: - url: /.* script: auto
- 执行部署命令:
gcloud app deploy
GAE会自动完成依赖安装、npm run build和应用启动,完全规避自定义构建的权限问题。
临时解决方案:手动清理dist目录后构建
若需保留现有Cloud Build流程,可在构建前手动删除dist目录,避免Nest CLI清理时触发只读错误:
修改cloudbuild.yaml
steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'bash' args: ['rm', '-rf', 'dist'] # 手动删除dist目录 - name: 'node' entrypoint: 'npm' args: ['run', 'build'] - name: 'gcr.io/cloud-builders/docker' args: ['build', '--tag=gcr.io/$PROJECT_ID/hello_npm', '.'] images: ['gcr.io/$PROJECT_ID/hello_npm']
内容的提问来源于stack exchange,提问作者PJoe
相关产品推荐
相关产品推荐

