我正在使用Spring Boot应用程序创建一个容器。使用jlink
安装Java和必需的模块。看起来像这样:
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
有没有人想出一种一致的方法来向以
jlink
开头的Java VM提供jdwp? 最佳答案
您将需要添加jdwp openjdk module
RUN jlink --compress=2 --no-header-files --no-man-pages \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.sql,java.xml,jdk.jdwp.agent \
--output /opt/jre