【问题标题】:Unable to generate native image using GraalVM无法使用 GraalVM 生成本机图像
【发布时间】:2020-10-28 06:57:51
【问题描述】:

我尝试使用 quarkus 和 GraalVM 创建自定义运行时 Lambda,在此过程中 (https://quarkus.io/guides/amazon-lambda),我尝试为 Gradle 应用程序构建本机映像。我的 Windows 机器上安装了 GraalVM(20.2.0) 和 native-image(20.2.0) 以及 JAVA 11 和 Docker。 当我运行命令生成本机图像时,我收到了这个错误。 我使用的命令是 gradlew clean build -Dquarkus.package.type=native -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:20.2.0-java11 -Dquarkus.native.container-build =true -Dquarkus.native.enable-http-url-handler=true

连接时出错:发布 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/images/create?fromImage=quay.io%2Fquarkus%2Fubi-quarkus-native-image&tag=20.2.0- java11: open //./pipe/docker_engine: 系统找不到指定的文件。在 Windows 上的默认守护程序配置中,必须运行提升的 docker 客户端才能连接。此错误还可能表明 docker 守护程序未运行。 无法从本机映像二进制文件中获取 GraalVM 版本。 docker:连接期间出错:发布 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/create:打开 //./pipe/docker_engine:系统找不到指定的文件。在 Windows 上的默认守护程序配置中,必须运行提升的 docker 客户端才能连接。此错误还可能表明 docker 守护程序未运行 请参阅“docker run --help”。

任务:quarkusBuild 失败

FAILURE:构建失败并出现异常。

出了什么问题: 任务“:quarkusBuild”执行失败。 io.quarkus.builder.BuildException:构建失败:构建因错误而失败 [错误]:构建步骤 io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build 抛出异常:java.lang.RuntimeException: Failed to build native image 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:307) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:936) 在 io.quarkus.builder.BuildContext.run(BuildContext.java:277) 在 org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) 在 org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046) 在 org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578) 在 org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452) 在 java.base/java.lang.Thread.run(Thread.java:834) 在 org.jboss.threads.JBossThread.run(JBossThread.java:479) 原因:java.lang.RuntimeException:图像生成失败。退出代码:127 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:520) 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:276)

谁能帮我解决这个问题。谢谢。

【问题讨论】:

  • 我认为这个错误与 GraalVM 无​​关。与 Windows 上的 Docker 有关。您可以使用 WLS 尝试相同的构建吗?
  • 您是否能够“清理包 -Pnative”,而不执行 docker 映像生成?

标签: quarkus graalvm graalvm-native-image


【解决方案1】:

导航到 Docker 安装并尝试以下命令。

DockerCli.exe -SwitchDeamon

它将您的容器从 Windows 切换到 Linux,如果没有安装支持该切换,它会通过链接向您抛出错误。 请通过链接完成安装。

【讨论】:

    【解决方案2】:

    我在 Windows 中遇到了或多或少与 maven 包相同的问题:

    mvn clean package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel:21.2-java11
    

    (...)

    error during connect: Post "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.24/images/create?fromImage=quay.io%2Fquarkus%2Fubi-quarkus-native-image&tag=21.2-jav
    a11": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
    

    解决方案:我检查了 Docker 守护程序 (Docker Desktop in Windows) 的状态,它根本没有运行(可能是因为内存不足)。我重新启动了 Docker,再次尝试了 maven 包,并且 docker pull 按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-08-31
      • 2022-12-18
      • 2021-09-09
      相关资源
      最近更新 更多