java - 为什么 OpenJDK 8 在使用 Docker 时没有提取正确的 JavaFX 库?

标签 java maven docker javafx

我有一个我写的java程序。主要有OpenJDK8、Maven、JavaFX。该程序自行构建并运行。我想将其放入 Docker 容器中,但构建它时遇到问题。

这是我的 Dockerfile:

FROM openjdk:8-jdk
FROM maven:3.3-jdk-8-onbuild
RUN apt-get update && apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/*
CMD ["java","-jar","target/"CodeDemo-1.0-SNAPSHOT.jar"]

这是我构建容器的运行内容:

sudo docker build -t java-maven-code-demo .

这是我不断提示没有 javafxpackager 的错误:

Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (unpack-dependencies) on project CodeDemo: Command execution failed. Cannot run program "/usr/lib/jvm/java-8-openjdk-amd64/jre/../bin/javafxpackager" (in directory "/usr/src/app"): error=2, No such file or directory -> [Help 1]

我将所有文件都放在 CodeDemo 目录中。在顶层,我有 src、target、Dockerfile、pom.xml。在目标中,我有编译好的jar。

我对这个错误感到困惑,因为我认为 Java 8 OpenJDK 是随 JavaFX 一起提供的。所以,如果我拉 OpenJDK,我应该得到 JavaFX 所需的东西(similar question on GitHub - 但解决方案仍然给出错误)。

任何人都可以指出我可能做错的方向吗?我还应该做些什么来获得正确的库吗?

最佳答案

您有多个 FROM 行。根据您的 Dockerfile,仅使用 Maven 基础镜像。也许在安装 openjfx 之前尝试通过另一个 RUN 语句安装 openjdk?

我在您的 Dockerfile 中也没有看到任何 COPY 语句。我最初假设 CodeDemo-1.0-SNAPSHOT.jar 默认情况下存在于 Maven 镜像上,但我只是尝试构建镜像,但它不存在。如果这是 Java 程序中的 jar 文件,请不要忘记通过 Dockerfile 中的 COPY 语句添加它。

关于java - 为什么 OpenJDK 8 在使用 Docker 时没有提取正确的 JavaFX 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509862/

相关文章:

java - 如何模拟私有(private)静态最终字段

java - 如何关闭任务中带有名称的库存

java - 如何在开发和部署之间设置不同的文件路径?

maven - 复制资源时完全搜索和替换源文件中的字符串

docker - 使用 Consul Docker 容器配置 Vault Docker 容器

java - Tomcat 服务器出现 "Java(TM) Platform SE binary has stopped working"错误

java - 为火车预订系统设计一个类

java - 升级 CXF 和 WSS4J 但找不到依赖项

docker - 如果 RUN 在多阶段构建中失败,则使 Docker 构建停止

docker - 在 docker run 命令中添加配置文件