Проект Java Maven с графическим интерфейсом в Docker с ошибкой X11 - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть проект JavaFX Maven.Запустить Я запускаю файл Jar, графический пользовательский интерфейс открывается для пользователя.Я пытаюсь запустить его из контейнера Docker.Я использую Ubuntu 16.04.

Я получаю эту ошибку:

Исключение в потоке "AWT-EventQueue-0" java.awt.HeadlessException: не установлена ​​переменная X11 DISPLAY, но эта программа выполнила операцию, которая требует этого.

Вот мой файл Docker (используется решение из здесь ).

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"]

I 'Мы просмотрели множество других ответов на этот вопрос, и вот что еще я пробовал:
Запуск CMD с -Djava.awt.headless=true.

Попытка SO-решения здесь где вызапустите «xauth add» внутри контейнера.Но хаут "не найден".Поэтому я попытался добавить RUN sudo apt-get install xauth в Dockerfile.Когда я пытался собрать, я получил сообщение о том, что xauth не найден.Я сделал то же самое с x11-apps.

Я подумал, может быть, он не будет установлен, потому что его не удалось найти на моем хост-компьютере (просто случайное предположение), но я могу запустить xauth на своем хостеmachine.

Единственными другими решениями, которые я видел, были Putty и ssh.Я просто хочу запустить контейнер Docker на моем компьютере, а не ssh в другой.Я также видел некоторые ответы о виртуализации.Нужно ли создавать целую виртуальную машину для запуска одной программы?Или я что-то упустил?

У кого-нибудь есть предложения?

1 Ответ

0 голосов
/ 09 февраля 2019

Это определенно возможно.Данное сообщение об ошибке на самом деле довольно хорошо. Вам необходимо установить переменную X11 DISPLAY.

Решение вашей проблемы может быть простым добавлением

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

к вашей команде docker run.Вам может потребоваться запустить

sudo xhost +

до этого, чтобы разрешить подключения к вашему хосту XServer.

Вы также можете взглянуть на следующие сообщения в блоге, которые объясняют это более подробноподробно:

Если вам также нужна актуальная поддержка графики, например, для OpenGL, посмотрите https://github.com/NVIDIA/nvidia-docker.

...