linux - 如何修复从 Linux 上的 Docker 启动的 Qt5 (QML) GUI 中的 libGL 错误?

标签 linux docker qt ubuntu qml

我正在尝试在本地 Ubuntu (20.04) 主机上运行的 docker (FROM ubuntu:20.04) 中运行 Qt5 应用程序(使用 QML 和 cpp main)。应用程序失败并显示:

#: ./src/qt_files/qt_gui
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
QGLXContext: Failed to create dummy context
Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 1, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::NoProfile) 
Aborted (core dumped)
我是能够本地运行应用程序没有问题,但有 无法让它在 docker 中运行.
我使用的 docker run 命令是:
docker run -it --rm --privileged -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME:/myhome -v /dev/:/dev/ --name qt-dev myqtdocker /bin/bash
我也使用 xhost local:root并确认我可以从 docker 运行其他 x11 应用程序。
比较 ldd 输出似乎表明应用程序在 docker 和 native 中都链接到相同的库。
需要注意的是,是的,机器包含一个专用的 NVIDIA GPU 但我是 故意不将其用作运行时 在任一环境中。 (与 nvidia-smi 确认)。尽管我可能对驱动程序的加载方式有误,但欢迎提出任何建议。提前感谢您的帮助。

最佳答案

解决方法是添加 -e QT_QUICK_BACKEND=software运行命令或 ENV QT_QUICK_BACKEND=software到你的 docker 文件。
我仍在寻找一种使用硬件模式运行它的方法,因为在软件模式下 map 折线存在一些问题。

关于linux - 如何修复从 Linux 上的 Docker 启动的 Qt5 (QML) GUI 中的 libGL 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69049171/

相关文章:

docker -/var/jenkins_home/workspace/John-Test@tmp/durable-2e590c15/script.sh:第1行:docker:未找到

docker [emerg] 1#1 : host not found in upstream after separate compose file

c++ - 获取创建 QObject 的 QThread

linux - 当使用 -platform eglfs 运行 Qt5 应用程序时,i.MX6 上的 "EGL Error : could not create the EGL surface: error 0x300b"

linux - 如何将 docker registry default 从 docker.io 更改为 centos 中的另一个地址

c - fflush、fsync 和 sync 与内存层

mysql - 我可以使用 mysql Dockerfile 构建一个已经在本地构建的 mysql 数据库吗?

linux - 如何从内核空间检查/验证用户空间中 .so 或 exe 的可用性

javascript - 在 Nodejs 中表示 Permission denied when entering DEBUG=app ./bin/www

c++ - Qt 5 : Access Cookies in QtWebEngine