|
|
本帖最后由 邹杰 于 2025-12-7 15:05 编辑
思路:
宿主机中有个进程一直从具名管道中读取命令,并从接收数据中取出关键字创建对应的结果写入通道
要求:
输入和输出需按以下格式写入or提取数据
写入数据格式:
cat << EOF > /run/host_exec/docker_in_cmds.fifo
ROS2|1233XXX # 第一行为标识信息 容器名|内部标识
ls / # 第二行开始都为cmd
EOF
响应数据格式
cat /run/host_exec/docker_out_ROS2.fifo
ROS2|1233XXX # 第一行是写入数据的标识信息
app # 第二行开始为命令执行结果
bin
boot
cdrom
...
使用:
只写命令不关心运行结果:
只需向 /run/host_exec/docker_in_cmds.fifo 管道写入数据 如:
cat << EOF > /run/host_exec/docker_in_cmds.fifo
ROS2|1233XXX # 第一行为标识信息 容器名|内部标识
ls / # 第二行开始都为cmd
EOF
关心运行结果:
第一步 监听
方式1.写入数据前自行创建管道, 假设容器名为ros2则创建命令 mkfifo -m 666 /dev/shm/docker_out_容器名.fifo
方式2.或等待宿主机自动创建, 但注意创建后需立即监听通道, 否则会因为过慢导致程序认为无人关心命令响应内容,导致错过响应
第二步 写入:
只需向 /run/host_exec/docker_in_cmds.fifo 管道写入数据 如:
cat << EOF > /run/host_exec/docker_in_cmds.fifo
ROS2|1233XXX # 第一行为标识信息 容器名|内部标识
ls / # 第二行开始都为cmd
EOF
注意:
1.目前命令是以root用户运行的, 后续会调整为与容器对应的gouxiong用户. 建议:尽量少使用需要root权限的命令, 后续若是调整, 各位会比较麻烦
2.写入管道可能同时多个程序使用的情况, 所以发送时建议按照指定格式
3./run/host_exec/文件夹的文件实际都存在内存中, 重启后会丢失
|
|