我有一个JavaFX Maven项目。运行我运行jar文件,GUI弹开用户。我想从一个码头工人容器中运行它。我使用Ubuntu 16.04。
我不断收到此错误:
例外在线程“AWT-EventQueue的-0” java.awt.HeadlessException异常:无X11 DISPLAY变量设置,但此方案执行它需要它的操作。
这里是(使用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加上”做方案here。但XAUTH“未找到”。所以我尝试添加RUN sudo apt-get install xauth
到Dockerfile。当我试图建立,我得到了一个错误说XAUTH没有被发现。我做了x11-apps
同样的事情。
我想,也许它不会安装,因为它可能不是我的主机(只是一个随机猜测)上找到,但我可以在我的主机上运行XAUTH。
唯一的其他解决方案我见过参与腻子和ssh。我只是想在我的电脑上运行的泊坞容器,而不是ssh到另一个。我也看到了有关虚拟化的一些答案。我必须创建一个完整的虚拟机来运行一个程序?还是我失去了一些东西?
任何人有什么建议?
这是绝对有可能。给定的错误消息还算是不错的。您需要设置X11 DISPLAY变量。
你的问题的解决方案可能是因为添加简单
-e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix
您docker run
命令。您可能需要运行
sudo xhost +
在此之前,为了让你的主机的XServer连接。
您还可以看看下面的博客文章,谁更详细地解释这一点:
如果您还需要实际的图形支持,例如OpenGL的,看看https://github.com/NVIDIA/nvidia-docker。