#### 拉取镜像 ```bash docker pull arm64v8/ros:humble ``` #### 启动脚本 ```code #!/bin/bash # 允许 Docker 访问 X 服务器(用于 GUI) xhost +local:docker # 容器名称 CONTAINER_NAME="ylhan_ros2_humble" # 检查容器是否存在 if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then # 容器存在 if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then # 容器正在运行,直接进入 echo "容器 ${CONTAINER_NAME} 正在运行,进入容器..." docker exec -it ${CONTAINER_NAME} bash else # 容器已存在但未运行,启动并进入 echo "容器 ${CONTAINER_NAME} 已存在但未运行,启动容器..." docker start -i ${CONTAINER_NAME} fi else # 容器不存在,创建并运行新容器 echo "容器 ${CONTAINER_NAME} 不存在,创建新容器..." docker run -it --rm \ --name ${CONTAINER_NAME} \ --network host \ --privileged \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ -v /home/ylhan/ros2_ws:/root/ros2_ws \ -v /dev:/dev \ arm64v8/ros:humble \ bash fi ``` #### 环境设置 宿主机 ```bash echo $DISPLAY ``` 假设输出为nvidia:13.0,在docker内: ```bash export DISPLAY=nvidia:13.0 ``` 复制宿主机home目录下.Xauthority文件到docker中home目录下,使用xeyes测试 ros2 docker隔离 ```bash export ROS_DOMAIN_ID=79 #设置独立的DOMAIN_ID ```