Apache spark 从Docker映像运行JavaFX Spark应用程序时出错
我正在尝试运行JavaFXSparkML应用程序的Docker映像。我可以创建一个映像,但是当运行映像时,我会遇到一个与JavaFX相关的错误 这是我的第一张Docker图片,如果有人能帮我指出正确的方向,我将不胜感激。我已经在网上搜索并尝试了几种方法将JavaFX添加到我的docker图像中,但我一直收到相同的错误 我的Dockerfile:Apache spark 从Docker映像运行JavaFX Spark应用程序时出错,apache-spark,javafx,dockerfile,Apache Spark,Javafx,Dockerfile,我正在尝试运行JavaFXSparkML应用程序的Docker映像。我可以创建一个映像,但是当运行映像时,我会遇到一个与JavaFX相关的错误 这是我的第一张Docker图片,如果有人能帮我指出正确的方向,我将不胜感激。我已经在网上搜索并尝试了几种方法将JavaFX添加到我的docker图像中,但我一直收到相同的错误 我的Dockerfile: # build #FROM maven AS build FROM maven:3.5.3-jdk-8 AS build WORKDIR /usr/s
# build
#FROM maven AS build
FROM maven:3.5.3-jdk-8 AS build
WORKDIR /usr/src/app
COPY pom.xml .
RUN apt-get update
RUN apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/*
# Install apt-utils
RUN apt-get update
RUN apt-get install -y apt-utils
RUN apt-get install -y curl
# Install openjfx
#RUN apt-get update
#RUN apt-get install -y openjfx
RUN mvn -f /usr/src/app/pom.xml clean package
#RUN mvn -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.1.1:go-offline
COPY . .
#RUN mvn -B -e -o -T 1C verify
# package without maven
FROM openjdk
COPY --from=build /usr/src/app/target/*.jar ./bda-1.0.0-SNAPSHOT.jar
RUN chmod 777 *.jar
EXPOSE 8080
CMD ["java","-jar","./bda-1.0.0-SNAPSHOT.jar"]
以及由此产生的错误:
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
... 1 more
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.RuntimeException: No toolkit found
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:830)
JDK仍然包括JavaFX。stacktrace包括JavaFX类。所以我想这不是你真正的问题 docker映像不直接支持UI。它只是一个与本地桌面相当隔离的容器 但似乎可以将docker容器配置为使用本地X-Server呈现UI。我发现这个例子:
基本上,您必须将所需的X-Server LIB安装到容器中,并配置显示器、网络和卷,以使其正常工作。谢谢您的帮助,但我仍然无法实现这一点。示例解决方案有点模糊。有没有一种方法可以使用docker maven插件或更好的X.Server示例在我的POM文件中实现这一点?