Запуск графического интерфейса Qt в контейнере докеровC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Запуск графического интерфейса Qt в контейнере докеров

Сообщение Anonymous »

Итак, у меня есть графический интерфейс C++ на основе Qt5, который я хочу запустить из контейнера Docker.
Когда я пытаюсь запустить его с помощью

Код: Выделить всё

docker run --rm -it my_image
это приводит к ошибке

Код: Выделить всё

qt.qpa.xcb: could not connect to display localhost:10.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Поэтому я искал, как это сделать. Я нашел приложение GUI Qt в контейнере докеров и на основе этого вызвал его с помощью

Код: Выделить всё

QT_GRAPHICSSYSTEM="native" docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my_image
что привело к той же ошибке.
Затем я обнаружил, можно ли запускать приложения с графическим интерфейсом в контейнере Docker?.

Принятый ответ, кажется, специфичен для определенных приложений, таких как Firefox?

Прокрутив дальше, я получил решение, которое говорит мне установить X11UseLocalhost no в sshd_config и затем назовите это как

Код: Выделить всё

docker run -v $HOME:/hosthome:ro -e XAUTHORITY=/hosthome/.Xauthority -e DISPLAY=$(echo $DISPLAY | sed "s/^.*:/$(hostname -i):/") my_image
это приводит к небольшому варианту приведенной выше ошибки:

Код: Выделить всё

qt.qpa.xcb: could not connect to display 127.0.1.1:13.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
После другого ответа я добавил ENV DISPLAY :0 в свой файл Dockerfile и вызвал его с помощью

Код: Выделить всё

xhost +
XSOCK=/tmp/.X11-unix/X0
docker run -v $XSOCK:$XSOCK my_image
На этот раз первая строка моей ошибки была qt.qpa.xcb: не удалось подключиться к дисплею:0.
Затем я попробовал другой ответ, добавив

Код: Выделить всё

RUN export uid=0 gid=0 && \
mkdir -p /home/developer && \
echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
echo "developer:x:${uid}:" >> /etc/group && \
mkdir /etc/sudoers.d/ && \
echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
chmod 0440 /etc/sudoers.d/developer && \
chown ${uid}:${gid} -R /home/developer
в мой файл Dockerfile и вызываю docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my_image, снова та же ошибка.
Я также попробовал несколько способов, описанных в http://wiki.ros.org/docker/Tutorials/GUI, та же ошибка.
Я делаю что-то не так? Обратите внимание, что я работаю на удаленном компьютере через SSH, конечно, с включенной переадресацией X11 (и приложение отлично работает вне Docker). Также обратите внимание, что я пишу клиент-серверное приложение, а серверная часть, которая не нуждается в элементах графического интерфейса, но использует большую часть исходного кода, отлично работает из своего контейнера.
Надеюсь для решения, которое не требует от меня изменения системы, поскольку причина, по которой я использую Docker, в первую очередь заключается в том, чтобы пользователи моего приложения могли запустить его без особых хлопот.

Подробнее здесь: https://stackoverflow.com/questions/656 ... -container
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Запуск приложения C# Api с использованием semiodesk trinity в контейнере докеров
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Добавление xdebug в мой файл докеров php apache приводит к сбою контейнера докеров
    Anonymous » » в форуме Php
    0 Ответы
    130 Просмотры
    Последнее сообщение Anonymous
  • Запуск графического интерфейса перед окном входа в систему на Raspberry Pi
    Anonymous » » в форуме Linux
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Запуск графического интерфейса Matlab из C#
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Модуль python-oracledb не может использовать InstantClient в контейнере докеров
    Anonymous » » в форуме Python
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»