记录RK3588的docker中启动rviz2报错

安装好rk3588 的docker,pull了ros的完整镜像后,想要启动rviz但是报错,下面是我的踩坑记录

0.原始的启动镜像的脚本:

bash 复制代码
sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \
        -e DISPLAY=$DISPLAY \
        -v /tmp/.X11-unix/:/tmp/.X11-unix \
        -v /dev/shm:/dev/shm \
        -v /home/$USER/ros:/ros_pro \
        $ARM_IMAGE

1.挂载路径 /usr/lib/aarch64-linux-gnu、/dev/dri 和 XDG_RUNTIME_DIR等,挂载的原因是因为要使用宿主机的gpu进行渲染。(下面的是错误的)

bash 复制代码
sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \
        -e DISPLAY=$DISPLAY \
        -v /tmp/.X11-unix/:/tmp/.X11-unix \
        -v /dev/shm:/dev/shm \
        -v /home/$USER/ros:/ros_pro \
        --device=/dev/dri:/dev/dri \
        -e XDG_RUNTIME_DIR=/run/user/$(id -u) \
        -v /run/user/$(id -u):/run/user/$(id -u) \
        -v /usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu \
        $ARM_IMAGE

其中/usr/lib/aarch64-linux-gnu的挂载是错误的,后面会遇到相关的问题

2.docker环境内运行rviz2显示缺少如下文件

bash 复制代码
缺少libtinyxml.so.2.6.2
缺少libtinyxml2.so.6
缺少libassimp.so.5
缺少libspdlog.so.1

在宿主机上安装如下软件包

bash 复制代码
sudo apt-get install libtinyxml2.6.2v5 libtinyxml2-6 libassimp5  libspdlog

3.在docker中启动还是报错如下

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root

arm_release_ver:g13p0-0leac0,rk_so_ver: 10

Segmentation fault (core dumped)

4.在宿主机上面的错误,显示驱动没有安装好

运行指令glxinfo | grep "OpenGL" 报错如下

bash 复制代码
Error: couldn't find RGB GLX visual or fbconfig

解决方案

bash 复制代码
sudo apt-get install --reinstall libgl1-mesa-dri libgl1-mesa-glx libglx-mesa0 mesa-utils

然后重启!重启!重启!

5.重启后,在宿主机上重新运行glxinfo | grep "OpenGL"还是报错:

libGL error:failed to create dri screen

libGL error : failed to load driver:rockchip

libGL error:failed to create dri screen

libGL error : failed to load driver:rockchip

但是后面是有一些正确的信息

6.在启动docker的命令中如果挂在了 /usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu 是无法启动rviz的

容器里原本的 /usr/lib/aarch64-linux-gnu 是和它自己安装的系统、ROS、RViz 依赖配套的。

你一挂载,就把它换成了宿主机的版本(Mesa、GL、Qt、OGRE 等版本全换了)。

容器的 ROS2/RViz 可能和宿主机的动态库版本不兼容 → 程序直接崩溃

所以选择挂载gpu有关的即可

-v /usr/lib/aarch64-linux-gnu/dri:/usr/lib/aarch64-linux-gnu/dri

正确的启动容器指令如下

bash 复制代码
sudo docker run -it  --rm --privileged --net=host -e DISPLAY=$DISPLAY  --name=my_image_name \
        -e DISPLAY=$DISPLAY \
        -v /tmp/.X11-unix/:/tmp/.X11-unix \
        -v /dev/shm:/dev/shm \
        -v /home/$USER/ros:/ros_pro \
        --device=/dev/dri:/dev/dri \
        -e XDG_RUNTIME_DIR=/run/user/$(id -u) \
        -v /run/user/$(id -u):/run/user/$(id -u) \
        -v /usr/lib/aarch64-linux-gnu/dri:/usr/lib/aarch64-linux-gnu/dri \

        $ARM_IMAGE
相关推荐
蜀道山老天师12 小时前
K8s Secret 与 ConfigMap 配置管理及动态更新实战详解
云原生·容器·kubernetes
梦想的颜色12 小时前
【Docker部署插件】:使用 Docker 部署生产级 Kafka 完整版教程
安全·docker·中间件·kafka·消息队列·docker-compose·后端开发
↘"LYong12 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
满意的星月14 小时前
基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)
docker·微服务·架构
bukeyiwanshui15 小时前
20260624 k8s pod命令
云原生·容器·kubernetes
网络研究院17 小时前
Brave浏览器放大招引入容器功能,实现多账户安全隔离
网络·安全·容器·浏览器·数据·隐私
sukioe17 小时前
【无标题】
后端·docker·centos
HAPPY酷18 小时前
【ROS2】VMware + Docker 运行 Gazebo 崩溃与“假死”排查实录
qt·docker·容器
Agilex松灵机器人19 小时前
UMR × NAVIS:移动机器人行业级通用一体化底盘与3D导航解决方案
人工智能·3d·机器人·ros·slam·vla·松灵机器人
Zhao_yani21 小时前
k8s基础知识
云原生·容器·kubernetes