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

时间:2019-02-07 13:23:37

标签: java maven docker x11

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

我不断收到此错误:

  

线程“ AWT-EventQueue-0”中的异常java.awt.HeadlessException:否   设置了X11 DISPLAY变量,但是该程序执行了一个操作   这需要它。

这是我的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。

尝试在容器中运行“ xauth add”的SO解决方案here。但是xauth“未找到”。因此,我尝试将RUN sudo apt-get install xauth添加到Dockerfile中。尝试构建时,出现错误,提示未找到xauth。我对x11-apps做过同样的事情。

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

我看到的唯一其他解决方案涉及Putty和ssh。我只想在我的计算机上运行Docker容器,而不是ssh插入另一个容器。我还看到了有关虚拟化的一些答案。我是否必须创建整个虚拟机才能运行一个程序?还是我错过了什么?

有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

解决问题的方法很简单,只需添加

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

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

sudo xhost +

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

您还可以查看以下博客文章,这些文章将对此进行更详细的说明:

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