我正在尝试在本地 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/