当前位置: 首页 > 知识库问答 >
问题:

调试与Quarkus容器图像jib打包的Quarkus应用程序

仲孙思源
2023-03-14

我希望在我们的开发、试运行和生产环境中运行相同的映像。对于我们的开发环境,我希望能够连接一个调试器。

我为我们的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 传递到容器会导致线程“主”java.nio.file.NoSuchFile 异常:/工作/库/部署/部署类路径.dat

如果没有,什么是合适的方法来完成这样的设置?

共有1个答案

王高超
2023-03-14

有几种方法可以做到这一点,但它们都依赖于这样一个事实,即在Quarkus中,您可以控制Jib为容器映像使用您想要的任何启动脚本。默认情况下,容器映像是用最小的< code>java -jar创建的...样式入口点,但是可以使用< code > quar kus . jib . JVM-entry point 进行更改。

如果您使用的默认基础映像已经包含一个提供了大量选项的< code>run-java.sh脚本(请参见https://hub . docker . com/r/fabric 8/Java-alpine-open JDK 11-JRE # startup-script-run-javash),那么您尝试完成的任务可以通过在< code > 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实现的旧Java项目,并将依赖项更新到Quarkus 2.4.0。然而,我注意到,当我启动应用程序时,它还启动了Docker PostgreSQL容器。我还有另一个数据库需要测试,所以我不需要Quarkus为我创建一个数据库。我找不到要在<code>应用程序中设置的任何配置属性。属性,以防止创建此属性。我遗漏了什么吗?有没有我需要设置的标志?

  • Quarkus-构建本机可执行文件指南讨论了如何构建和测试本机可执行文件,以及如何在docker容器中构建本机可执行文件。 我遵循本指南使用Docker设置了一个通用的本机可执行文件构建,我们正在CI服务器上使用它,并且无论主机操作系统如何,都可以在本地构建它。 但是,生成的本机可执行文件必须在构建器docker映像使用的架构上运行,但Maven和Gradle测试任务尝试直接执行生成的映像。例如,

  • 实际上,我使用野飞JEE服务器并考虑切换到Quarkus。关于quarkus,我有以下问题: 1.坚持。xml 我看到夸克斯使用自己的来建立数据库。我可以用来代替吗? 2.容器管理的持久性 quarkus是否提供了类似的功能,还是我必须自己管理持久性?

  • 当我用quarkus构建我的应用程序的本机映像时,我得到一个大小为150MB的可执行文件(关联的jar大小为12MB,我怀疑底层VM是否能弥补所有空间)。这是正常的还是我做错了什么?有没有办法像记录本机映像中加载的内容那样进行调查?

  • 亲爱的,我下面的原生图像构建教程由Quarkus创建原生graalvm,但我得到了下面的错误: 我的环境:OS:CentOS 7 Quarkus:0.11.0 Java:Open JDK 1.8.0_181 GraalVM:1.0.0-rc13 使用quarkus在你的应用程序中没有主要方法,但如何使用graal原生图像使其工作?

  • 我想用Quarkus Optaplanner应用程序进行高级基准测试。实施和运行它的最佳方式是什么? 当浏览Optaplanner的“旧”示例时,它们都实现了基准测试(在本视频中,有一个关于Optaplanner与Quarkus的演示,但基准测试是通过旧示例显示的)。我使用Quarkus构建了我的优化求解器,我想知道如何在这里实现基准测试。我的输入数据写在JSON文件中,我想尝试不同的求解器配置。