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

Docker容器内构建GraalVM应用失败求助

问题分析

Exit code 137 本质是进程因内存不足被系统强制杀死,GraalVM 的 native-image 工具在构建原生镜像时需要大量内存,而 Docker 容器默认分配的内存配额不足以支撑这个过程——你本地构建正常是因为本地 JVM 可以使用更多系统内存,容器内则受限于 Docker 的资源限制。

解决方案

1. 调整 Docker Desktop 的内存分配

打开 Docker Desktop → 点击右上角设置图标 → 选择「Resources」→「Advanced」,将内存分配调整至至少 8GB(推荐 16GB 以上,如果系统内存允许),保存后重启 Docker。

2. 构建时强制指定容器内存

执行 docker build 命令时,通过参数给构建容器分配足够内存:

docker build --memory=8g --memory-swap=8g -t your-image-name .

--memory-swap=8g 会关闭内存交换,避免因交换导致的性能下降和内存溢出。

3. 给 native-image 工具分配更多 JVM 内存

在 Gradle 配置中直接给 native-image 工具指定内存参数:

  • 修改项目根目录的 build.gradle(或 build.gradle.kts),添加:
tasks.withType(org.graalvm.buildtools.gradle.NativeCompileTask) {
    args += ["-J-Xmx6g"] // 给 native-image 底层的 JVM 分配 6GB 内存
}
  • 或者在构建命令中临时传递参数:
./gradlew nativeCompile --no-daemon -Pnative.image.buildArgs=-J-Xmx6g

4. 确保镜像架构匹配(M1 专属)

M1 是 arm64 架构,需确保使用的 GraalVM 镜像为对应架构版本,避免跨架构模拟(QEMU)额外消耗内存:
修改 Dockerfile 的 base 镜像行:

FROM --platform=linux/arm64 ghcr.io/graalvm/graalvm-community:21 as base

5. 优化构建上下文(可选)

将 COPY . . 替换为只拷贝构建必需的文件,减少不必要的文件传输,提升构建效率:

FROM --platform=linux/arm64 ghcr.io/graalvm/graalvm-community:21 as base
WORKDIR /app
COPY build.gradle settings.gradle ./
COPY src ./src
COPY gradle ./gradle
COPY gradlew ./

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:33:24