在我的系统上安装了各种软件包和程序,如vtk,tvtk,ParaView,mayavi,...之后,我最终得到了完全损坏的全局软件包。例如:目前我不能运行mayavi超过几秒钟,然后它崩溃没有任何消息。问题是,每个库需要不同版本的依赖关系(特别是Qt4与Qt5),你有时需要手动构建软件,以允许某些非标准的功能(ParaView与Python支持)等。结果是完全混乱。
因此,我决定在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 repository,但是我不喜欢通过vnc
的解决方案。有没有其他方法可以做到这一点?我不熟悉OpenGL
,所以任何帮助都是非常感谢的。
2条答案
按热度按时间mi7gmzs61#
您可以尝试以下步骤:
然后你应该能够使用软件渲染OpenGL。
从主机共享X unix套接字可能会有一些警告。你可以使用mviereck/x11docker在第二台X服务器上运行你的图像。软件渲染OpenGL工作正常。硬件渲染是实验性的,正在开发中。
在你的github存储库示例中,你使用了host display:0,共享
$DISPLAY
和unix套接字:如果你把
dev/dri
中的所有文件都共享给你的容器(尤其是/dev/dri/card0
),很可能你会得到硬件加速。如果你得到一些渲染故障,你可以使用docker运行选项--ipc=host
。根据X的设置,你也需要共享~/.Xauthority
和$XAUTHORITY
,或者如果容器用户是root,在主机上设置xhost +SI:localuser:root
。**注意:**此设置会破坏容器隔离!(要获得更好的隔离效果,请查看x11 docker。)
2jcobegt2#
除了@mviereck建议的内容之外,在nvidia-docker容器上,我还需要执行
docker run --privileged
。显然,这不是一个理想的解决方案,但对于隔离不是主要问题的许多本地用例来说已经足够了。
这些选项中的许多选项对于OpenGL来说是多余的,但对于需要扩展访问的某些应用程序来说是有用的。
因为我使用的是nvidia docker container,所以
$DOCKER
实际上就是nvidia-docker
。我还将主机用户添加到了video
组,但我不确定这是否重要。