2016-09-16 162 views
1

在我的系統上安裝各種軟件包和程序(如vtk,tvtk,ParaView,mayavi,...)之後,我最終得到完全損壞的全局程序包。例如:目前我無法運行mayavi超過幾秒鐘,比沒有任何消息崩潰。問題是每個庫都需要不同版本的依賴關係(特別是Qt4與Qt5),您有時需要手動構建軟件以允許某些非標準功能(支持ParaView的Python)等等。結果是一團糟。支持OpenGL的Docker中的ParaView

因此,我決定在Docker中構建ParaView來隔離軟件。我絕對需要ParaView的Python腳本功能,它不是Ubuntu存儲庫軟件包的默認選擇。 Here是我工作的結果。我受到this repository的啓發,但是有一些缺點,特別是沒有Python和MPI支持,它是官方ParaView回購的一個分支。

所以,我用它並創建一個新的存儲庫。它是一個包含所有必需軟件包的Ubuntu映像,ParaView是使用MPI和Python支持構建的。請參閱README如何構建它以及如何運行它。如果有人有興趣,我可以將圖像推到dockerhub。請注意,主機上的用戶需要有uid 1000,否則X服務器隧道將無法正常工作。但是,這可以很容易地修復。

因此,問題在於。當我運行paraview包,我看到此錯誤消息:

libGL error: failed to open drm device: No such file or directory 
libGL error: failed to load driver: i965 

顯然,沒有OpenGL加速。有沒有人知道如何在Docker中啓用OpenGL支持?我知道this存儲庫,但我不喜歡通過vnc的解決方案。有沒有其他的方式如何做到這一點?我不熟悉OpenGL,所以任何幫助,非常感謝。

回答

2

你可以嘗試以下步驟:

  • 安裝檯面-utils的在圖像
  • 你的容器用戶添加到組視頻。

然後你應該可以使用軟件渲染OpenGL。

從主機共享X unix套接字可能有一些注意事項。您可以使用mviereck/x11docker來在第二臺X服務器上運行您的映像。軟件渲染OpenGL工作正常。硬件渲染是實驗性的和開發中的。

在您的GitHub庫例子中,你正在使用的主機顯示器:0,共享$DISPLAY和Unix套接字:

docker run -ti -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix paraview 

如果你與你的容器(尤其是/dev/dri/card0)分享dev/dri的所有文件,最有可能你的硬件加速。如果你得到一些渲染故障,你可以使用碼頭運行選項--ipc=host。根據X設置,如果容器用戶爲root,則需要共享~/.Xauthority$XAUTHORITY,或者在主機上設置xhost +SI:localuser:root

小心:此設置將打破容器隔離! (爲了更好的隔離,請查看x11docker。)

1

除了@mviereck提出的,在nvidia-docker容器上,我需要做docker run --privileged。我的整個搬運工運行命令看起來像:

顯然,這不是一個理想的解決方案,但足以讓許多本地使用的情況下,隔離是不是一個大問題。

CMD="${DOCKER} run --detach=true \                                                                                   
       --privileged \                                                                                    
       --group-add ${DOCKER_GROUP_ID} \                                                                                
       --env HOME=${HOME_DIR} \                                                                                  
       --env DISPLAY \                                                                                    
       --interactive \                                                                                    
       --name DevContainer \                                                                                   
       --net=host \                                                                                     
       --rm \                                                                                      
       --tty \                                                                                      
       --user=${USER_ID}:${GROUP_ID} \                                                                                
       --volume $HOME_DIR_HOST:${HOME_DIR} \                                                                               
       --volume $WORK_DIR:${WORK_DIR} \                                                                                
       --volume /tmp/.X11-unix:/tmp/.X11-unix \                                                                              
       --volume /var/run/docker.sock:/var/run/docker.sock \                                                                           
       ${IDEA_IMAGE}" 

很多的這些選項是多餘的OpenGL的,但可用於某些應用需要擴展的訪問。

由於我使用的是nvidia docker container,$DOCKER實際上是nvidia-docker在我的情況。 我還將我的主機用戶添加到video組,但我不確定這是否重要。