【问题标题】:gazebo and rviz in docker stopped working after installing nvidia安装 nvidia 后,docker 中的凉亭和 rviz 停止工作
【发布时间】:2021-05-19 18:06:12
【问题描述】:

长话短说:我有一个工作的 docker 图像,我可以通过 Xserver 显示图形化的东西。我对其进行了多次测试,一切似乎都完美无缺。然而,在安装 Nvidia 和 CUDA 后,我开始收到此错误:

Error setting socket option (IP_ADD_MEMBERSHIP).
Error setting socket option (IP_ADD_MEMBERSHIP).
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  151 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  38
  Current serial number in output stream:  37
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  151 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  38
  Current serial number in output stream:  37

因为我需要 CUDA 来完成另一个项目,所以我不能直接卸载它。目前我正在运行这些命令:

docker build -t $container_name $repo_DIR/.
docker run -it -d --net=host --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=$container_name -v $HOME/repos/$container_name/src/:"/home/docker/catkin_ws/src_extern/" --gpus all $container_name bash
xhost +local:"docker inspect --format='{{ .Config.Hostname }}' $container_name" 
docker start $container_name 
docker exec --user docker -it $container_name bash

我尝试了来自论坛的不同方法,但我找不到任何有效的方法或任何与我的确切问题相关的帖子。有什么建议?如果可能的话,它也应该能够在没有 cuda/nvidia 的情况下运行,因为我也需要笔记本电脑的图像。如果它在 cuda/nvidia 上工作也很好,因为无论如何我不需要它用于 docker 映像。

其他一些信息 我正在使用 Arch 和 CUDA-10.2nvidia-460 驱动程序。 docker 镜像在ubuntu:bionic 上运行,这些是包括 libGL 在内的所有文件:

/usr/lib/x86_64-linux-gnu/libGLESv1_CM.so.1
/usr/lib/x86_64-linux-gnu/libGLESv2.so
/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0
/usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2
/usr/lib/x86_64-linux-gnu/libGLU.so.1
/usr/lib/x86_64-linux-gnu/libGLU.so
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/libGLU.a
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
/usr/lib/x86_64-linux-gnu/libGLX.so
/usr/lib/x86_64-linux-gnu/libGL.so.1
/usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so
/usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX.so.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLESv1_CM.so.1.0.0
/usr/lib/x86_64-linux-gnu/libGLESv1_CM.so
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
/usr/lib/x86_64-linux-gnu/libGLESv2.so.2.0.0

编辑1:解决方案,显然只有rviz和gazebo坏了,通过关注this

修复了

编辑 2:更改为更相关的标题。

【问题讨论】:

  • 您的$DISPLAY 的内容是什么/如何/如何从容器访问Xserver?它必须通过从容器到 Xserver 的网络连接 - 即 Xserver 必须配置为侦听网络端口,这不是默认的 - 或者通过必须绑定的 unix 套接字建立连接 -安装到容器中 - 这里不是这种情况。所以我不太明白这首先是如何工作的。你有什么改变吗?
  • 是的,在安装 nvidia 之前一切正常,但我找到了解决方案,我会将其添加到我的问题中。

标签: linux docker nvidia ros nvidia-docker


【解决方案1】:

安装nvidia后只有gazebo和rviz坏了。我通过关注this 修复了它。我在 dockerfile 中错过的部分是:

# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
    ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
    ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2017-03-14
    • 1970-01-01
    • 2013-07-03
    • 2014-02-09
    • 2016-06-13
    • 2017-03-18
    • 2015-03-30
    • 2014-08-08
    相关资源
    最近更新 更多