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

DigitalOcean上Docker构建yarn install报137错误码问题咨询

故障根因

命令返回非零码137的本质是进程收到系统发送的SIGKILL信号被强制终止,你这个场景属于Docker构建阶段内存不足触发OOM(内存溢出):

  • 你更换的是缩容后的小规格Droplet,总内存比之前正常运行的实例低,且DigitalOcean小规格机型默认不分配swap交换空间
  • 报错节点恰好是yarn install --frozen-lockfile的最终步骤,这个阶段yarn会解压依赖包、编译原生Node模块,内存占用峰值很高,内存不够时系统会直接杀掉占内存最高的构建进程
  • 旧版本Docker默认开启的BuildKit组件会额外占用构建内存,也会放大这个问题。
修复方案

按以下顺序操作,第一步就能解决绝大多数同类问题:

  • 给系统添加2G swap交换空间,执行以下命令:
    # 创建2G大小的swap文件
    fallocate -l 2G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    # 配置开机自动挂载swap
    echo '/swapfile none swap sw 0 0' >> /etc/fstab
    
    配置完成后直接重新执行docker-compose build构建即可。
  • 如果加完swap仍报错,调整Docker服务配置放开内存限制、关闭高内存占用的BuildKit:
    新建Docker服务配置文件/etc/systemd/system/docker.service.d/override.conf,写入以下内容:
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd --default-ulimit memlock=-1:-1 --buildkit=false
    
    执行以下命令重载配置重启Docker:
    systemctl daemon-reload
    systemctl restart docker
    
  • 可选优化,降低构建阶段内存峰值:
    你当前的Dockerfile重复复制了3次.env.local,存在冗余构建层,可以删掉多余的复制步骤;另外可以调整依赖安装逻辑,把依赖的脚本编译步骤后移到builder阶段,降低deps阶段的内存占用:
    • 把deps阶段的yarn安装命令修改为RUN yarn install --frozen-lockfile --network-timeout 100000 --ignore-scripts
    • 在builder阶段的RUN yarn build命令前,新增一行RUN yarn install --frozen-lockfile --offline
  • 兜底方案:如果以上操作全部完成还是构建失败,说明你选的Droplet规格内存过小(512M及以下内存机型即使加swap,跑Next.js构建也容易出现资源不足),Next.js项目构建最低要求1G内存的机型。

内容的提问来源于stack exchange,提问作者Loudrous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:57:13