在我的系统上安装各种软件包和程序,如vtk,tvtk,ParaView,mayavi,...后,我最终得到了完全破碎的全局软件包。例如:目前我无法运行mayavi超过几秒钟,而不是在没有任何消息的情况下崩溃。问题是每个库都需要不同版本的依赖(特别是Qt4与Qt5),您有时需要手动构建软件以允许某些非标准功能(支持Python的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
并不熟悉,所以非常感谢任何帮助。
答案 0 :(得分:2)
您可以尝试以下步骤:
然后你应该可以使用渲染的OpenGL软件。
从主机共享X unix套接字可能有一些注意事项。您可以使用mviereck/x11docker在第二台X服务器上运行映像。软件渲染OpenGL工作正常。硬件渲染是实验性的,并且正在开发中。
在您的github repo示例中,您正在使用主机显示:0,共享$DISPLAY
和unix套接字:
docker run -ti -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix paraview
如果您使用容器(尤其是dev/dri
)共享/dev/dri/card0
中的所有文件,则很可能会获得硬件加速。如果出现一些渲染故障,可以使用docker run option --ipc=host
。根据X设置,如果容器用户是root用户,则还需要共享~/.Xauthority
和$XAUTHORITY
,或者在主机上设置xhost +SI:localuser:root
。
注意:此设置会破坏容器隔离! (为了更好的隔离,请查看x11docker。)
答案 1 :(得分:1)
除了@mviereck提出的,在nvidia-docker容器上,我还需要docker run --privileged
。我的整个docker run命令看起来像:
显然,这不是一个理想的解决方案,但对于许多本地使用情况来说已经足够了,因为隔离并不是主要问题。
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
组,但我不确定这是否重要。