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

Docker Buildx执行Cargo Build时出现137(OOM)错误,调内存仍未解决

解决Docker Buildx跨平台构建Rust项目时OOM(退出码137)的问题

问题核心

普通docker build可正常运行,但docker buildx build跨平台构建时触发OOM,本质是Buildx默认使用的docker-container驱动会在独立容器环境中执行构建,该容器的内存限制未继承Docker Desktop全局配置的12GB内存,再加上Mac Studio上用QEMU模拟x86_64架构的额外开销,最终导致cargo编译时内存耗尽。

解决方案

1. 为Buildx Builder配置明确的内存限制

Buildx的容器化builder默认资源限制较低,需手动指定内存:

  • 查看当前Buildx builder列表:
    docker buildx ls
    
  • 删除现有默认builder(若存在):
    docker buildx rm default
    
  • 创建新builder并指定12GB内存限制,同时设为默认使用:
    docker buildx create --use --name custom-builder --driver-opt "moby.resources.memory=12g"
    
  • 重新执行构建命令:
    docker buildx build --platform linux/amd64 -t test4 .
    

2. 限制Cargo编译的并行数

Rust的cargo默认会根据CPU核心数启动多编译进程,跨平台模拟下CPU和内存开销会放大,限制并行数可降低内存占用:
修改Dockerfile中的构建命令,添加环境变量限制编译任务数:

FROM rust:1.65.0-bullseye AS builder

WORKDIR app

COPY . .

# 限制cargo仅使用1个编译进程,减少内存消耗
RUN CARGO_BUILD_JOBS=1 cargo build --release

FROM debian:11.5
WORKDIR app

COPY --from=builder ./app/target/release/hello ./hello

CMD ["./hello"]

3. 确认Docker Desktop资源配置生效

检查Docker Desktop资源设置:

  • 打开Docker Desktop偏好设置 → Resources → Advanced
  • 确认Memory设置为12GB或更高,同时CPU分配至少8核(QEMU模拟x86_64对CPU资源需求较高,CPU不足也可能间接导致内存耗尽)
  • 应用设置后重启Docker Desktop

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:45:49