Apache spark 从Docker映像运行JavaFX Spark应用程序时出错

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

我正在尝试运行JavaFXSparkML应用程序的Docker映像。我可以创建一个映像,但是当运行映像时,我会遇到一个与JavaFX相关的错误

这是我的第一张Docker图片,如果有人能帮我指出正确的方向,我将不胜感激。我已经在网上搜索并尝试了几种方法将JavaFX添加到我的docker图像中,但我一直收到相同的错误

我的Dockerfile:

# 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文件中实现这一点?