找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 112|回复: 0

docker容器应用执行宿主机Cmd方法

[复制链接]

8

主题

14

回帖

146

积分

注册会员

积分
146
发表于 2025-5-20 15:10:44 | 显示全部楼层 |阅读模式
本帖最后由 邹杰 于 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/文件夹的文件实际都存在内存中, 重启后会丢失

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|狗熊技术交流

GMT+8, 2026-1-2 23:16 , Processed in 0.020571 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表