2017-05-24 99 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