You need to enable JavaScript to run this app. 安装Nvidia与CUDA后Docker容器内Gazebo、RViz图形功能失效咨询
优惠活动
大模型
产品
解决方案
定价
更多

安装Nvidia与CUDA后Docker容器内Gazebo、RViz图形功能失效咨询

安装CUDA/NVIDIA驱动后Docker容器X11图形透传异常

问题背景

此前构建的Docker镜像可正常通过XServer透传输出图形界面,多轮测试全功能无故障。在镜像内完成Nvidia驱动与CUDA环境安装后,启动图形程序时触发GLX类渲染报错,无法正常输出界面。

运行报错信息

启动图形程序时控制台输出如下错误:

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

现有操作流程

构建、启动与操作Docker容器的命令如下:

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

环境参考信息

  • 宿主机系统:Arch发行版,搭载CUDA-10.2、nvidia-460版本驱动
  • 容器基础镜像: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/libGLESv2.so.2.0.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0

方案预期与验证结论

方案要求

  • 即便运行环境中未安装CUDA/Nvidia驱动,Docker镜像也可在普通笔记本电脑上正常运行
  • 因镜像本身无CUDA/Nvidia能力使用需求,绕开对应依赖实现图形功能正常输出的方案同样可接受

已验证有效方案

  • 经排查,出现运行异常的仅为RViz与Gazebo程序
  • 按照ROS官方Wiki硬件加速章节的nvidia-docker2教程操作完成对应配置后,上述报错可完全消除,图形功能恢复正常

内容的提问来源于stack exchange,提问作者CLover32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 17:15:08