nvidia-docker 容器中的 rViz

4
我已经设置了一系列的ROS节点,每个节点都在Docker容器内运行,并通过docker-compose启动。我在笔记本电脑上运行它时没有任何问题,除了rviz因为仅在CPU上运行而变慢。现在,我将项目移动到一台配有nVidia RTX2080的Ubuntu18.04LTS机器上,但是相同的设置会产生错误。我已经安装了nvidia-docker2,而daemon.json将默认运行时设置为nvidia。我不知道从哪里开始查看错误。我找到的帖子没有解决我的问题,已关闭。
如何在nVidia-docker2中运行rViz?
rviz_1           | libGL error: No matching fbConfigs or visuals found
rviz_1           | libGL error: failed to load driver: swrast
rviz_1           | libGL error: No matching fbConfigs or visuals found
rviz_1           | libGL error: failed to load driver: swrast
rviz_1           | libGL error: No matching fbConfigs or visuals found
rviz_1           | libGL error: failed to load driver: swrast
rviz_1           | [ INFO] [1576658065.533954900]: rviz version 1.13.6
rviz_1           | [ INFO] [1576658065.534009692]: compiled against Qt version 5.9.5
rviz_1           | [ INFO] [1576658065.534021481]: compiled against OGRE version 1.9.0 (Ghadamon)
rviz_1           | [ INFO] [1576658065.548489531]: Forcing OpenGl version 0.
rviz_1           | [ WARN] [1576658065.859692866]: OGRE EXCEPTION(3:RenderingAPIException): Unable to create a suitable GLXContext in GLXContext::GLXContext at /build/ogre-1.9-B6QkmW/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/GLX/OgreGLXContext.cpp (line 61)
rviz_1           | rviz::RenderSystem: error creating render window: OGRE EXCEPTION(3:RenderingAPIException): Unable to create a suitable GLXContext in GLXContext::GLXContext at /build/ogre-1.9-B6QkmW/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/GLX/OgreGLXContext.cpp (line 61)
rviz_1           | rviz::RenderSystem: error creating render window: OGRE EXCEPTION(3:RenderingAPIException): Unable to create a suitable GLXContext in GLXContext::GLXContext at /build/ogre-1.9-B6QkmW/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/GLX/OgreGLXContext.cpp (line 61)

Nvidia-docker是否已经“过时”?最新版本发布于2020年9月。我猜现在只使用docker而不是nvidia-docker了? - questionto42
1
nvidia-docker已经被弃用。 - questionto42
1
nvidia-docker2软件包仍会安装工具以启用docker使用nvidia,因此从这个角度来看它并没有“废弃”。相反,nvidia-docker run的语法已经被弃用,建议使用docker run --gpus ...等。 - AwokeKnowing
3个回答

3

请查看http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration
需要自己构建Nvidia docker镜像。

$ cd path/to/dir
$ cat Dockerfile
FROM your-repo/your-image:your-tag
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
    ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
    ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
$ docker build -t your-nvidia-image .
$ xhost +local:
$ docker run --gpus all -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY your-nvidia-image /bin/bash

1

我最近在docker compose中遇到了同样的问题,但已经解决了。我在我的dockerfile中添加了以下内容并重新构建:

ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

请确保在compose.yaml中设置了以下内容:
卷:
-"/tmp/.X11-unix:/tmp/.X11-unix:rw"
-"/var/run/dbus:/var/run/dbus"  

环境:

-"/usr/local/nvidia/bin:${PATH}"
-"NVIDIA_VISIBLE_DEVICES: all"
-"NVIDIA_DRIVER_CAPABILITIES:compute,compat32,utility,graphics,video,display"
- "DISPLAY=unix$DISPLAY"
- "QT_X11_NO_MITSHM=1"
- "XDG_RUNTIME_DIR= /run/user/1000"

0

今天我遇到了同样的问题。我在我的CPU笔记本电脑上使用docker测试rviz,一切都很正常,直到我在GPU加速硬件上测试设置时出现了问题。我已经通过使用http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration中提出的“nvidia-docker2”解决了这个问题。

显然,您需要使用环境变量“NVIDIA_VISIBLE_DEVICES”和“NVIDIA_DRIVER_CAPABILITIES”构建您的镜像,并使用runtime=nvidia运行容器。希望这可以帮助到您。


我被迫使用docker-compose,但是在dockers deamon.json中将nvidia运行时设置为默认值应该可以正常工作。然而它并没有。我甚至无法让ROS Wiki提供的示例正常工作(不使用compose)。有什么建议吗? - jaaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接