Отладка приложения Quarkus, упакованного с помощью quarkus-контейнера-изображения-кливера

#quarkus

Вопрос:

Я хотел бы запустить один и тот же образ в наших средах разработки, постановки и производства. Для нашей среды разработки я хотел бы иметь возможность подключить отладчик.

Я создаю образ для нашего приложения 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 Передача переменной среды в контейнер вызывает a Exception in thread "main" java.nio.file.NoSuchFileException: /work/lib/deployment/deployment-class-path.dat .

Если нет, то каков был бы подходящий способ выполнить такую настройку?

Ответ №1:

Есть несколько способов сделать это, но все они основаны на том факте, что в Quarkus вы можете управлять кливером, чтобы использовать любой сценарий запуска, который вы хотите для изображения контейнера. По умолчанию изображение контейнера создается с минимальной java -jar ... точкой входа в стиле, но это можно изменить с помощью 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
 

Теперь у приложения будет открыт порт отладки (но он не будет приостановлен), и вы сможете подключиться к нему с помощью отладчика