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