问题:在 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