3

我正在创建一个带有 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

4

1 回答 1

4

您将需要添加 jdwp openjdk模块

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
于 2020-03-23T06:29:39.933 回答