2017-05-24 3 views
1

J'ai un conteneur docker à partir duquel j'essaie d'exécuter une application pyqt. Tout fonctionne bien, sauf un morceau de l'interface graphique n'est pas en mesure de rendre. Les journaux docker jettent ceci:Erreur libGL: impossible de charger le pilote swrast dans le conteneur 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. 

Dans mon Dockerfile, j'ai essayé d'installer à peu près tous les paquets que je pouvais trouver qui pourraient être liés, y compris mesa-utils.

En ce qui concerne le fichier docker-Compose, voici à quoi il ressemble:

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 

Toutes les idées que je pourrais être absent?

+0

Fun one. Je suppose que le problème est que le noyau n'a peut-être pas les pilotes dont il a besoin. Personnellement, je n'ai jamais essayé de faire travailler le docker dans un environnement graphique, alors ce n'est qu'une spéculation de ma part. avez-vous confirmé que le noyau hôte a un pilote vidéo chargé? IIRC, swarst est pour le rendu logiciel, ce qui signifie qu'il n'utilise pas le GPU matériel. –

Répondre

1

Compris. J'ai dû construire le gui avec le support OpenGL accéléré par le matériel. Theres a repo (https://github.com/gklingler/docker3d) qui contient des images docker avec nvidia ou d'autres pilotes graphiques.

L'autre capture était, il n'a pas fonctionné pour moi à moins que l'hôte et le conteneur aient le exact même conducteur. Pour résoudre ce problème, vous pouvez exécuter le script shell suivant si vous utilisez Linux:

#!/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