【问题标题】:Why is OpenJDK 8 not pulling proper JavaFX libraries when using Docker?为什么在使用 Docker 时 OpenJDK 8 没有提取正确的 JavaFX 库?
【发布时间】:2019-06-27 19:45:04
【问题描述】:

我有一个我编写的 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 的错误:

未能执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec 项目 CodeDemo 上的(解包依赖项):命令执行失败。 无法运行程序 “/usr/lib/jvm/java-8-openjdk-amd64/jre/../bin/javafxpackager”(在 directory "/usr/src/app"): error=2, No such file or directory -> [帮助 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 语句添加它。
  • @libzz 谢谢!这两个建议都解决了这个问题。旁注:我最终添加而不是复制。不过,出于好奇,我也尝试了 COPY,它也可以正常工作(这似乎对我读过的文档有意义)。如果你写你的 cmets 作为答案,我会接受。

标签: java maven docker javafx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2021-12-26
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多