升级macOS Sonoma14.3后Docker容器libjvm.so加载失败求助
解决macOS Sonoma 14.3下Docker容器加载libj9vm29.so失败的问题
环境信息
- 设备:MacBook M3 Pro
- macOS版本:Sonoma 14.3
- Docker Desktop版本:v4.26.1
- 容器镜像:基于
eclipse-temurin:17.0.8.1_1-jdk-jammy构建
报错详情
执行镜像构建或容器运行时触发以下错误:
2024-01-23 15:40:38 libjvm.so preloadLibrary(/opt/java/openjdk/lib/compressedrefs/libj9vm29.so): /opt/java/openjdk/lib/compressedrefs/libj9vm29.so: cannot enable executable stack as shared object requires: Invalid argument 2024-01-23 15:40:38 libjvm.so failed to load: j9vm29
解决办法
方法1:更新Docker Desktop到最新版本
Docker官方在4.27.0及以上版本修复了Sonoma 14.3的兼容性问题,升级后即可正常运行容器。
方法2:调整容器安全策略(无需升级Docker)
运行容器时添加--security-opt seccomp=unconfined参数,临时放宽安全限制:
docker run --security-opt seccomp=unconfined [你的镜像名/容器名]
方法3:修改镜像中的库文件标记
在Dockerfile中添加步骤,修改libj9vm29.so的可执行栈标记,从根源解决依赖问题:
FROM eclipse-temurin:17.0.8.1_1-jdk-jammy RUN apt-get update && apt-get install -y --no-install-recommends execstack \ && execstack -c /opt/java/openjdk/lib/compressedrefs/libj9vm29.so \ && apt-get purge -y --auto-remove execstack \ && rm -rf /var/lib/apt/lists/*
重新构建镜像后即可正常运行。
原因说明
macOS Sonoma 14.3更新了内核安全规则,Docker默认的seccomp配置会阻止程序设置可执行栈,而eclipse-temurin:17.0.8.1_1-jdk-jammy中的libj9vm29.so依赖可执行栈才能加载,因此触发报错。
内容的提问来源于stack exchange,提问作者Nahidul Islam
相关产品推荐
相关产品推荐

