问题:在 Dockerfile 中,配置如下:
FROM registry.cn-shanghai.aliyuncs.com/aishangwei/tools:bladex_alpine-java_openjdk17_cn_slim
ENV TZ=Asia/Shanghai
RUN mkdir /blade
WORKDIR /blade
EXPOSE 8106
ADD blade-system.jar ./app.jar
ENTRYPOINT ["java", "--add-opens java.base/java.lang.reflect=ALL-UNNAMED", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=prod"]
构建完成后启动镜像报错如下:
...
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @7ce026d3
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
...
解决如下:这是由于 JVM 并不能识别参数中的空格,所以正确的参数应该是:
ENTRYPOINT ["java", "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
作者:jackzang 创建时间:2024-07-16 15:54
最后编辑:jackzang 更新时间:2024-07-16 15:59
最后编辑:jackzang 更新时间:2024-07-16 15:59