You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署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的构建部署,步骤更简洁:

  1. 删除项目根目录下的Dockerfile和cloudbuild.yaml
  2. 修改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
  1. 执行部署命令:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:19:53