libGL错误:未能在docker容器中加载驱动程序swrast

我有一个docker容器,我试图运行一个pyqt应用程序。 一切运作良好,除了一大块的graphics用户界面无法呈现。 docker日志扔出来了:

libGL error: failed to load driver: swrast X Error: GLXBadContext 169 Extension: 154 (Uknown extension) Minor opcode: 6 (Unknown request) Resource id: 0x6400003 X Error: BadValue (integer parameter out of range for operation) 2 Extension: 154 (Uknown extension) Minor opcode: 3 (Unknown request) Resource id: 0x0 ... QGLContext::makeCurrent(): Failed. 

在我的Dockerfile中,我尝试安装几乎所有可能与之相关的软件包,包括mesa-utils

在docker-compose文件方面,看起来像这样:

 version: '2' services: gui: build: . volumes: - .:/usr/src - /tmp/.X11-unix:/tmp/.X11-unix command: /bin/bash -c "python start.py" environment: - DISPLAY=unix$DISPLAY - QT_X11_NO_MITSHM=1 devices: - "/dev/snd:/dev/snd" - "/dev/dri:/dev/dri" privileged: true 

任何想法我可能会错过?

弄清楚了。 我不得不用硬件加速OpenGL支持来构buildgui 。 Theres回购( https://github.com/gklingler/docker3d )包含与NVIDIA或其他graphics驱动程序支持的docker图像。

另一个问题是,除非主机和容器有完全相同的驱动程序,否则它不适用于我。 为了解决这个问题,如果你在linux上运行,你可以运行下面的shell脚本:

 #!/bin/bash version="$(glxinfo | grep "OpenGL version string" | rev | cut -d" " -f1 | rev)" wget http://us.download.nvidia.com/XFree86/Linux-x86_64/"$version"/NVIDIA-Linux-x86_64-"$version".run mv NVIDIA-Linux-x86_64-"$version".run NVIDIA-DRIVER.run