2016-09-16 165 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组,但我不确定这是否重要。