2017-05-24 100 views
1

我有一个码头容器,我试图运行一个pyqt应用程序。一切运作良好,除了一大块的GUI不能渲染。泊坞窗日志扔了这一点:libGL错误:无法加载驱动程序仓库在码头集装箱

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

在泊坞窗,撰写文件而言,这里是什么样子:

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 

任何想法我可能会丢失?

+0

有趣的一个。我怀疑问题是内核可能没有它需要的驱动程序。我个人从来没有试图让docker在gui环境中工作,所以这只是我的猜测而已。你确认主机内核已加载视频驱动程序吗? IIRC,swarst用于软件渲染,这意味着它不使用硬件GPU。 –

回答

1

想通了。我必须用硬件加速的OpenGL支持来构建gui。 Theres回购(https://github.com/gklingler/docker3d)包含与NVIDIA或其他图形驱动程序支持的码头图像。

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