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

时间:2017-05-24 18:41:22

标签: docker pyqt docker-compose dockerfile nvidia

我有一个docker容器,我试图运行pyqt应用程序。一切都运行良好,除了一大块GUI无法渲染。 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

我可能缺少什么想法?

1 个答案:

答案 0 :(得分:1)

想出来。我必须使用硬件加速的OpenGL支持构建gui。有一个包含nvidia或其他图形驱动程序支持的docker镜像的仓库(https://github.com/gklingler/docker3d)。

另一个问题是,除非主机和容器具有完全相同的驱动程序,否则它对我不起作用。为了解决这个问题,如果你在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