我正在创建一个带有 Spring Boot 应用程序的容器。Java 和所需的模块使用jlink
. 它看起来像这样:
RUN jlink --compress=2 --no-header-files --no-man-pages \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.sql,java.xml \
--output /opt/jre
入口点如下所示:
ENTRYPOINT [ "sh", "-c", "java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -jar /app.jar"]
容器启动失败,因为 JVM 找不到jdwp
. 没有jlink
包含jdwp
二进制文件的文档。可能是设计使最小的运行时间不需要支持调试。
所以我试图将所需的库手动放入/opt/jre/lib
容器中。我从运行 OpenJDK 11 的 linux vm 复制libjdwp.so
并使用以下命令将其放入我的容器中:
ADD libjdwp.so /opt/jre/lib/
这导致启动时崩溃:
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000000000001e66, pid=1, tid=6
#
# JRE version: OpenJDK Runtime Environment (Zulu11.33+15-CA) (11.0.4+11) (build 11.0.4+11-LTS)
# Java VM: OpenJDK 64-Bit Server VM (11.0.4+11-LTS, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C 0x0000000000001e66
有没有人想出一种一致的方式来为 java VM 提供 jdwp jlink
?