调试使用 quarkus-container-image-jib 打包的 Quarkus 应用程序
Debug Quarkus app packaged with quarkus-container-image-jib
我想 运行 在我们的开发、暂存和生产环境中使用相同的映像。对于我们的开发环境,我希望能够连接调试器。
我像这样为我们的 Quarkus 应用构建图像(mvn 包):
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-container-image-jib</artifactId>
</dependency>
...
</dependencies
<properties>
<quarkus.container-image.build>true</quarkus.container-image.build>
<quarkus.jib.ports>8080,5005</quarkus.jib.ports>
<quarkus.container-image.image>...</quarkus.container-image.image>
...
</properties>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>1.12.1.Final</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
是否可以在调试模式下启动应用程序,否则 运行prod 配置文件?通过环境变量将 JAVA_OPTIONS=-Ddebug=true
传递给容器会导致 Exception in thread "main" java.nio.file.NoSuchFileException: /work/lib/deployment/deployment-class-path.dat
.
如果不是,完成此类设置的合适方法是什么?
有几种方法可以做到这一点,但它们都依赖于这样一个事实,即在 Quarkus 中,您可以控制 Jib 为容器映像使用您想要的任何启动脚本。
默认情况下,容器映像是使用最小 java -jar ...
样式的 ENTRYPOINT 创建的,但可以使用 quarkus.jib.jvm-entrypoint
.
进行更改
如果您使用的默认基础映像已经包含一个 run-java.sh
脚本,该脚本提供了大量选项(请参阅 https://hub.docker.com/r/fabric8/java-alpine-openjdk11-jre#startup-script-run-javash),那么您可以通过设置以下内容来完成您想要完成的工作在 application.properties
:
quarkus.jib.jvm-entrypoint=/deployments/run-java.sh
quarkus.jib.environment-variables."JAVA_APP_DIR"=/work # this is needed so the script knows where the Quarkus jar is
然后使用以下方式启动应用程序:
docker run --rm -p 8080:8080 -p 5005:5005 -e JAVA_DEBUG=true gandrian/getting-started:1.0.0-SNAPSHOT
现在应用程序将打开调试端口(但不会挂起),您可以使用调试器连接到它
我想 运行 在我们的开发、暂存和生产环境中使用相同的映像。对于我们的开发环境,我希望能够连接调试器。
我像这样为我们的 Quarkus 应用构建图像(mvn 包):
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-container-image-jib</artifactId>
</dependency>
...
</dependencies
<properties>
<quarkus.container-image.build>true</quarkus.container-image.build>
<quarkus.jib.ports>8080,5005</quarkus.jib.ports>
<quarkus.container-image.image>...</quarkus.container-image.image>
...
</properties>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>1.12.1.Final</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
是否可以在调试模式下启动应用程序,否则 运行prod 配置文件?通过环境变量将 JAVA_OPTIONS=-Ddebug=true
传递给容器会导致 Exception in thread "main" java.nio.file.NoSuchFileException: /work/lib/deployment/deployment-class-path.dat
.
如果不是,完成此类设置的合适方法是什么?
有几种方法可以做到这一点,但它们都依赖于这样一个事实,即在 Quarkus 中,您可以控制 Jib 为容器映像使用您想要的任何启动脚本。
默认情况下,容器映像是使用最小 java -jar ...
样式的 ENTRYPOINT 创建的,但可以使用 quarkus.jib.jvm-entrypoint
.
如果您使用的默认基础映像已经包含一个 run-java.sh
脚本,该脚本提供了大量选项(请参阅 https://hub.docker.com/r/fabric8/java-alpine-openjdk11-jre#startup-script-run-javash),那么您可以通过设置以下内容来完成您想要完成的工作在 application.properties
:
quarkus.jib.jvm-entrypoint=/deployments/run-java.sh
quarkus.jib.environment-variables."JAVA_APP_DIR"=/work # this is needed so the script knows where the Quarkus jar is
然后使用以下方式启动应用程序:
docker run --rm -p 8080:8080 -p 5005:5005 -e JAVA_DEBUG=true gandrian/getting-started:1.0.0-SNAPSHOT
现在应用程序将打开调试端口(但不会挂起),您可以使用调试器连接到它