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

使用dockers创建GraalVM本机映像

罗绪
2023-03-14

我正在尝试用Dockers创建一个GraalVM本地映像。我已经创建了一个Micronaut项目,并成功创建了jar应用程序,并在docker中运行;此外,我已经用这个jar文件创建了一个GraalVM本机映像,现在可以运行这个应用程序,但我需要在docker中运行一个GraalVM本机映像,在论坛中寻找答案。我发现有必要在docker中构建本机映像。因此我尝试了这个docker文件:

# use graalvm image
# replace the occurences of "product" with you jar name
FROM openjdk:8u171-alpine3.7

# expose your port, 8080 fo Micronaut applicatoin
EXPOSE 8080

# copy the fat jar
COPY build/libs/*-all.jar products.jar

# create the reflection configuration file generated by Micronaut
# for other frameworks you need to construct the file yourself
ADD . build
#RUN java -cp products.jar io.micronaut.graal.reflect.GraalClassLoadingAnalyzer

# run the native image compiler, you should already know the command arguments
# if you're not running micronaut
ENV PATH=PATHTOGRAALVM/graalvm-ce-java8-20.3.0/bin:$PATH
ENV JAVA_HOME=PATHTOGRAALVM/graalvm-ce-java8-20.3.0

CMD native-image --no-server \
             --class-path products.jar \
         -H:ReflectionConfigurationFiles=build/reflect.json \
         -H:EnableURLProtocols=http \
         -H:IncludeResources="logback.xml|application.yml|META-INF/services/*.*" \
         -H:Name=products \
         -H:Class=products.Application \
         -H:+ReportUnsupportedElementsAtRuntime \
         -H:+AllowVMInspection \
         --rerun-class-initialization-at-runtime='sun.security.jca.JCAUtil$CachedSecureRandomHolder,javax.net.ssl.SSLContext' \
         --delay-class-initialization-to-runtime=io.netty.handler.codec.http.HttpObjectEncoder,io.netty.handler.codec.http.websocketx.WebSocket00FrameEncoder,io.netty.handler.ssl.util.ThreadLocalInsecureRandom

# the native command will be used to run the application
CMD ./products

它不会抛出任何异常,所以我试着用这个来运行我的docker:

docker build --tag="products-with-graavm" . 
docker run -d -p 8080:8080 products-with-graavm

但它什么都不做,我的应用程序没有运行,我的 Dockerfile 是否有问题,或者我需要添加其他配置来创建我的本机映像?谢谢。

共有1个答案

缑高朗
2023-03-14

我已经在 Docker 中创建了我的本机映像,我删除了本机映像命令行中的一些行,这些行在创建本机映像时会引发异常。此行尝试查找一些不在该位置的文件。另外,我删除了一些来自旧版本的GraalVM的行。这些行是这样的:

-H:ReflectionConfigurationFiles=build/reflect.json \
-H:+AllowVMInspection \
--rerun-class-initialization-at-runtime='sun.security.jca.JCAUtil$CachedSecureRandomHolder,javax.net.ssl.SSLContext' \
--delay-class-initialization-to-runtime=io.netty.handler.codec.http.HttpObjectEncoder,io.netty.handler.codec.http.websocketx.WebSocket00FrameEncoder,io.netty.handler.ssl.util.ThreadLocalInsecureRandom

谢谢。

 类似资料:
  • 我在这里将Micronaut应用程序作为Graalvm本地映像进行试用。

  • 我检查了直到Stage-2,本机映像运行得非常好。我包含了Stage-3来运行我的本机映像,结果出现了以下错误 需要帮助如何运行我的本机映像

  • 失败:生成失败,出现异常。 错误:执行任务“:QuarkusBuild”失败。Io.Quarkus.Builder.BuildException:生成失败:由于错误导致生成失败[error]:生成步骤Io.Quarkus.Deployment.Pkg.Steps.NativeImageBuildStep#Build引发异常:java.lang.RuntimeException:未能在io.Quar

  • 我正在使用GraalVm 21.0.0.2的native-image-maven-plugin为JavaFX应用程序创建一个本机映像。当我尝试在构建成功结束后执行它时,我得到以下错误: 我很感激你能给我的任何帮助。

  • 我正在试图弄清楚如何通过将GraalVM本机映像代理与Quarkus应用程序一起使用。 我试着跑步: 但是我得到了一个错误: 有什么提示吗? 我的Java版本:

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