【发布时间】: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.2 和 nvidia-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