gpt4 book ai didi

Docker 中的 Java GUI Maven 项目出现 X11 错误

转载 作者:行者123 更新时间:2023-11-30 10:06:37 26 4
gpt4 key购买 nike

我有一个 JavaFX Maven 项目。运行 我运行 Jar 文件,为用户弹出一个 GUI。我正在尝试从 Docker 容器运行它。我正在使用 Ubuntu 16.04。

我一直收到这个错误:

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.

这是我的 Docker 文件(使用来自 here 的解决方案)。

FROM docker.io/java as firstStage
WORKDIR /workdir/
RUN /usr/sbin/useradd --comment Developer \
--home-dir /home/developer \
--non-unique --uid 1000 --user-group --system \
--shell /bin/bash developer && mkdir -p /home/developer

RUN chown -R developer:developer /home/developer && mkdir -p /opt/app && chown -R developer:developer /opt/app

RUN echo 'developer ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
USER developer
ENV HOME /home/developer
VOLUME /opt/app

FROM maven:3.5.0-jdk-8
COPY --from=firstStage /workdir/ .
COPY . /
RUN apt-get update && apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/* && mvn clean install && DISPLAY=localhost:0.0

CMD ["java","-jar","/target/CodeDemo-1.0-SNAPSHOT.jar"]

我已经查看了这个问题的许多其他答案,以下是我尝试过的其他方法:
使用 -Djava.awt.headless=true 运行 CMD。

试用 SO 解决方案 here在容器中运行“xauth add”的位置。但是 xauth“没有找到”。所以我尝试将 RUN sudo apt-get install xauth 添加到 Dockerfile。当我尝试构建时,我收到一条错误消息,提示未找到 xauth。我对 x11-apps 做了同样的事情。

我想它可能不会安装,因为它在我的主机上找不到(只是随机猜测),但我可以在我的主机上运行 xauth。

我见过的唯一其他解决方案涉及 Putty 和 ssh。我只想在我的计算机上运行 Docker 容器,而不是通过 ssh 连接到另一台计算机。我还看到了一些关于虚拟化的答案。我必须创建一个完整的虚拟机来运行一个程序吗?还是我遗漏了什么?

有人有什么建议吗?

最佳答案

这绝对是可能的。给定的错误信息实际上是相当不错的。您需要设置 X11 DISPLAY 变量。

您的问题的解决方案可以像添加一样简单

-e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix

到您的 docker run 命令。您可能需要运行

sudo xhost +

在此之前,为了允许连接到您的主机 XServer。

您还可以查看以下博客文章,他们对此进行了更详细的解释:

如果您还需要实际的图形支持,例如OpenGL,看看https://github.com/NVIDIA/nvidia-docker .

关于Docker 中的 Java GUI Maven 项目出现 X11 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54574372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com