docker 中的 gazebo 和 rviz 在安装 nvidia 后停止工作

gazebo and rviz in docker stopped working after installing nvidia

长话短说:我有一个可用的 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

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

一些其他信息 我正在使用 Arch 和 CUDA-10.2 以及 nvidia-460 driver。 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:更改为更相关的标题。

安装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