本节课程针对树莓派5主板和Jetson-Nano主板,Orin主板无需进入docker。
概念理解:
我们将树莓派/jetson nano 主环境中称为宿主机,Docker 环境称为Docker,其中树莓派/jetson nano 除通讯代理在宿主机内运行外,其余所有程序均在Docker 内运行。宿主机终端显示的用户名:jetson/pi ,Docker 中显示的是用户名为:root。
树莓派5和Jetson-Nano主板开机会自动进入Docker手柄自启动程序(run_humble.sh),并且会将接在USB上的手柄挂载进入Docker,由于为了确保手柄自启动程序的顺利运行,所以此Docker 启动前并未挂载语音模块、myserial 等设备,所以在后续运行程序不能使用此Docker ,需要用脚本启动新的挂载了多个设备的Docker。
进入Docker(进入前确保语音模块、控制板都有接在主板/HUB板上)
sh ~/run_humble.sh
进入docker终端后,当前目录是/,一般的,我们需要在/root目录下进行输入指令,因此,在docker终端输入cd
,然后按下回车,即可进入到/root目录下查看文件。
多终端进入相同容器:
由于开机自启动的docker 只有一个终端,无法在一个终端同时输入其余指令,我们需要知道怎么样使用多个终端同时在一个容器内运行。
在树莓派5和Jetson-Nano中输入以下指令,查询首次进入docker中生成的容器的相关信息,
xxxxxxxxxx
docker ps
如上图所示,出现了上面内容,显示的镜像是192.168.2.51:5000/ros-humble-a1:1.0.0
,与我们的run_humble.sh中的镜像名字对应上,说明这个是刚才执行sh run_humble.sh
生成的容器,它的名字是intelligent_sutherland
,这里每个人生成的名字都不一样,根据实际情况查询的为准,只需要是镜像名字能够对上即可。我们后边根据这个容器名字来进入docker。
在宿主机内输入以下指令同时进入此容器,
xxxxxxxxxx
docker exec -it intelligent_sutherland /bin/bash
intelligent_sutherland根据实际生成的容器名字进行修改。按下回车进入docker终端,这个就是我们首次启动进入的docker容器的终端,后续的程序指令就需要在这个docker容器的终端中输入。
有时候,我们对首次进入的docker容器里边的代码进行修改,然后重启或者关机了。这时候如果按照首次进入docker的方法进入,会发现之前做的修改都不存在了,只是因为我们重新启动了一个新的docker容器,里边自然是没有我们之前做的修改。如果我们关机后需要再次进入首次进入的docker容器,那么就需要先按照以下步骤进入:查询docker容器名字,重启docker容器,进入docker容器。
输入以下指令查询首次进入的docker,
xxxxxxxxxx
docker ps -a
这里就罗列出所有的容器,包括正在运行或者没有在运行的容器,我们根据首次进入docker容器的时候,来确认需要启动哪个容器,比如我在3周前启动了小车docker,这里我查询到这个容器的名字是loving_kirch,如下图所示,
然后在终端输入下指令重启小车docker容器,
xxxxxxxxxx
docker restart intelligent_sutherland
intelligent_sutherland根据实际查询的容器名字进行修改。这条指令只需要在小车重启后启动一次。
终端输入以下指令进入小车docker容器,
xxxxxxxxxx
docker exec -it intelligent_sutherland /bin/bash
按下回车进入docker终端,这个就是我们首次启动进入的docker容器的终端,后续的程序指令就需要在这个docker容器的终端中输入。
如果需要重启后进入终端,运行的程序需要显示图形界面的话,那么就需要在小车的终端中输入以下指令,
xxxxxxxxxx
xhost +
1.确保现有的Docker 容器关闭,运行以下指令启用新的容器
xxxxxxxxxx
sh ~/run_humble.sh
2.运行上面的多终端进入相同容器程序进入相同docker