8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Docker 容器中运行 Qt GUI

PriceOne 1月前

64 0

因此,我有一个基于 Qt5 的 C++ GUI,我想从 Docker 容器内部运行它。当我尝试使用docker run --rm -it my_image启动它时,这会导致错误输出qt.qpa.xcb:无法

所以,我有一个基于 Qt5 的 C++ GUI,我想从 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.

所以我搜索了如何做到这一点。我 在docker容器中找到了GUI Qt应用程序 ,并以此为基础调用它

QT_GRAPHICSSYSTEM="native" docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my_image

这导致了同样的错误。

然后我发现 你能在 Docker 容器中运行 GUI 应用程序吗? .
其中接受的答案似乎特定于某些应用程序,例如 Firefox?
向下滚动我得到了一个解决方案,告诉我设置 X11UseLocalhost no in 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: could not connect to display :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 之外运行良好)。另请注意,我编写的是客户端-服务器应用程序,服务器部分不需要 GUI 元素但共享大部分源代码,因此可以在其容器中正常运行。

我希望找到一个不需要我改变系统的解决方案,因为我使用 Docker 的首要原因是让我的应用程序用户能够轻松运行它。

帖子版权声明 1、本帖标题:在 Docker 容器中运行 Qt GUI
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由PriceOne在本站《docker》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您无法在 Docker 中轻松运行 GUI 应用程序;您需要管理员级别的权限,并手动配置 X Window System 连接设置的几个细节。对于您的最终用户来说,本机二进制文件将更加容易。

返回
作者最近主题: