使用Ballerina构建Docker原生镜像时遇错误求助
使用GraalVM构建Ballerina原生镜像时Docker构建失败
问题详情
按照官方文档尝试用GraalVM原生镜像编译器构建Ballerina应用,在Docker镜像构建阶段失败,涉及内存不足、GraalVM模块警告以及依赖冲突三类问题。
错误日志
> [build 4/4] RUN sh build-native.sh my_service.jar my_service: #0 3.676 WARNING: Unknown module: org.graalvm.nativeimage.llvm specified to --add-exports #0 3.678 WARNING: Unknown module: org.graalvm.nativeimage.llvm specified to --add-exports #0 3.680 WARNING: Unknown module: org.graalvm.nativeimage.llvm specified to --add-exports #0 59.74 ======================================================================================================================== #0 59.74 GraalVM Native Image: Generating 'my_service' (executable)... #0 59.76 ======================================================================================================================== #0 75.84 Error: Image build request failed with exit status 137 ------ ERROR: failed to solve: executor failed running [/bin/sh -c sh build-native.sh my_service.jar my_service]: exit code: 137 error [k8s plugin]: module [wso2/my_service:0.1.0] docker build failed. refer to the build log warning: Detected conflicting jar files: 'ballerina-rt-2201.4.0.jar' dependency of 'wso2/my_service' conflict with 'opentelemetry-api-1.0.0.jar' dependency of 'ballerinax/jaeger'
环境信息
- JDK: 11.0.18 (arm64) "Eclipse Adoptium" - "OpenJDK 11.0.18"
- GraalVM: graalvm-ce-java11-darwin-aarch64-22.3.1
解决方法
1. 修复内存不足问题(exit status 137)
exit code 137表示进程因内存不足被系统杀死,GraalVM构建原生镜像需要大量内存:
- 本地Docker环境:打开Docker设置,把可用内存调整到8GB以上(推荐10GB)
- CI/CD环境:给构建节点分配至少8GB内存资源,确保GraalVM构建过程有足够内存
2. 处理GraalVM模块警告
org.graalvm.nativeimage.llvm模块不存在的警告不影响构建成功,若要消除:
- 检查
build-native.sh脚本中的--add-exports参数,移除所有涉及org.graalvm.nativeimage.llvm的配置项
3. 解决依赖冲突
ballerina-rt和opentelemetry-api的版本冲突需要调整依赖:
- 更新
ballerinax/jaeger的版本,确保它与当前使用的Ballerina runtime(2201.4.0)兼容 - 或者在项目的
Ballerina.toml中添加依赖排除规则,排除冲突的opentelemetry-api版本,强制使用Ballerina runtime自带的版本
内容的提问来源于stack exchange,提问作者Arshika Mohottige
相关产品推荐
相关产品推荐

