1.一些基本的指令
1.1 容器
- 要查看正在运行的容器:
sudo docker ps
- 查看所有的容器(包括停止状态的容器)
sudo docker ps -a
- 重新命名容器
sudo docker rename <old_name> <new_name>
<old_name> 替换为你的容器名称
- 停止容器:
如果容器正在运行,首先需要停止它。使用以下命令:
sudo docker stop <container_id or name>
-启动容器
sudo docker start <container_id or name>
-进入容器
sudo docker exec -it <container_id or name> /bin/bash
1.2 镜像
要查看所有本地镜像:
sudo docker image
或者
sudo docker image ls
也可以通过 通过Portainer查看
1.3 如果要使用本机的USB等接口 启动容器
要使Docker容器能够访问宿主机的USB接口,您需要在启动容器时映射相关的USB设备文件。下面是一个示例命令,它将宿主机的所有USB设备接口都映射到容器中:
sudo docker run -it --privileged --name=my_container \
-v /dev/bus/usb:/dev/bus/usb \
my_image
参数解释 :
-it:表示容器将以交互式方式运行,并且分配一个伪终端。
–privileged:给予容器完全的主机设备访问权限。这是一种简便的方法,但从安全角度来说并不推荐,因为它会给容器提供很宽泛的权限。
–name=my_container:为新创建的容器指定一个名称,这里是 my_container。
-v /dev/bus/usb:/dev/bus/usb:将宿主机的 /dev/bus/usb 目录挂载到容器的相同路径。这允许容器访问USB设备。
my_image:您要启动的Docker镜像名称。
这种方法将所有USB设备映射到容器中,但如果您知道特定设备的文件路径,更推荐映射特定的设备。例如,如果您知道您的USB设备在 /dev 下的特定文件(比如 /dev/ttyUSB0),您可以只映射这个设备:
sudo docker run -it --name=my_container \
--device=/dev/ttyUSB0 \
my_image
使用 --device 参数将提供更精细的控制,仅将必要的设备文件映射到容器中,而不是授予容器过多权限。
2.使用容器启动D435i
为了让Docker容器访问宿主机的USB接口来启动Intel RealSense D435i摄像头,您需要将摄像头的USB设备文件映射到容器内部。通常,这些设备文件位于 /dev 目录下,例如 /dev/video0(摄像头视频流)以及可能的 /dev/bus/usb/… 文件
首先,通过在宿主机上运行 ls /dev 或 lsusb 命令来识别D435i摄像头的具体设备文件。
接下来,使用以下命令将摄像头的USB设备映射到容器中:
-
-
查看本机的image
这里我的fastplanner_250_image 已经安装好了realsence的驱动
-
-
- 启动容器
xhost +local:root # 允许本地root用户连接到X服务器
sudo docker run -it --privileged \
--gpus all \ # 仅在您的宿主机上有NVIDIA GPU并已安装NVIDIA Docker时添加此行
--device=/dev/video0 \
--device=/dev/video1 \
--device=/dev/video2 \
--device=/dev/bus/usb \
--volume=/tmp/.X11-unix:/tmp/.X11-unix \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \ # 对于某些Qt应用程序可能需要此环境变量
--net=host \ # 如果您需要容器访问宿主机的网络服务
--name=my_realsense_container \
fastplanner_250_image
接下来
cd home/Fast-Drone-250/
source devel/setup.bash
roslaunch realsense2_camera rs_d435_camera_with_model.launch