安装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
相关产品推荐
相关产品推荐

