首页 > 其他分享 >Docker非交互式运行命令

Docker非交互式运行命令

时间:2023-08-28 18:12:49浏览次数:39  
标签:mycontain nm -- echo filter 命令 交互式 Docker docker

Docker

交互式 shell - interactive shell
  docker exec 最常见的用法。你可以使用 -it 参数启动一个交互式 shell,如 /bin/bash 或 /bin/sh,然后在容器内部执行命令
非交互式执行--用来执行预先设定的命令
   单个命令   
脚本和单个命令
    执行脚本的shell都是“非交互式”的,但我们也有办法把它启动为“交互式”shell,方法就是在执行bash命令时,添加-i选项:
 login logout exit		
   logout退出“登陆shell”,使用exit退出“非登录shell”
   登录shell”执行的startup文件为~/.bash_profile,而“非登陆shell”执行的startup文件为~/.bashrc。
   通过--noprofile选项可以阻止系统加载“profile”系列的startup文

在Docker容器中运行一个非交互式命令

 如果你需要在一个正在运行的Docker容器内运行一个命令,但不需要任何交互性,可以使用不带任何标志的docker exec 命令     
 docker   info 检查docker引擎
 rostopic list 检查ros引擎  
 docker inspect contain_nm | grep "Running"
 docker ps --filter name=nostalgic_stallman
 docker ps --filter status=running  --filter name=mycontain_nm 
 docker ps --filter status=running  --filter name=^/mycontain_nm$
 
 docker ps --filter name=^/mycontain_nm$
 
 $(docker ps -a --filter name=^/mycontain_nm$|wc -l)==2
  精确匹配 name 为 bingohuang 的容器。注意,容器实际名称,开头是有一个正斜线 / 

非交互式执行docker命令

  ## 要在容器的某个目录下运行命令,可以使用--workdir 标志来指定目录
  ## 把环境变量和要运行的命令一起传入容器。-e 标志可以让你指定一个环境变量 个充满环境变量的文件,你可以用--env-file 标志来做
  ## 在后台运行命令:如果你不想在终端中看到命令的输出,你可以使用 -d 参数在后台运行命令
  ## 以特定用户身份运行命令:如果你的 Docker 容器有多个用户,你可以使用 -u 参数以特定用户身份运行命令。
  docker exec contain_nm sed -n '6p' /usr/local/scene_nm/share/test/conf/fig.yaml
  docker exec contain_nm sed -n '2p' /usr/local/scene_nm/share/test/conf/fig.yaml

检查topic有没有

###检查topic有没有消息
检查topic 的消息频次
 rosmsg info 
 rostopic list 
 rosbag info 

步骤

是否存在-存在是否启动
检查容器的状态-确保容器都启动了
修改容器的配置
检查topic的message-确保topic都有消息

脚本

##查看容器是否存在
if [ $(docker ps -a --filter name=^/mycontain_nm.0.2$ |wc -l) == 2 ]; then
    echo "Have mycontain_nm.0.2 "
else
    echo "No mycontain_nm container "
fi

##查看容器是否启动
if [ $(docker ps --filter name=^/mycontain_nm.0.2$ --filter status= running|wc -l) == 2 ]; then
    echo "mycontain_nm.0.2 running "
else
    echo "mycontain_nm container Not running "
fi

For 循环查看多个容器是否启动running

#!/bin/bash
i=0
for file in mycontain_nm your_model.1 other_cfg_1 
do
    let i++
	if [ $(docker ps -a --filter status=running --filter name=^$file$ |wc -l) == 2 ];then
	    echo "$i : $file container Running "
	else
	   echo  "$i : $file container Not Running !!"
    fi
done

检查Ros 的topic 是否存在,是否有消息

#!/bin/bash
i=0
for file_nm in /mytopic_1 /mytopic_10
do 
    let i++
    result=$(timeout 2s rostopic echo -n 2 $file_nm); 
    echo  "$i "	
    if [[ $result != "" ]] ; then
	   echo "$i:$file_nm topic have msg" ;
	else
	   echo "$i:$file_nm no msg  !!"
	fi;
done;

查看状态

################ get.sh ##############################
#!/bin/bash
test_number=$(echo $DEV_ID | cut -d '_' -f2)
echo $test_number
docker exec mycontain_nm sed -n '6p' /usr/local/fig.yaml


###############改变 #################
#!/bin/bash
test_number=$(echo $DEV_ID | cut -d '_' -f2)
echo $test_number
docker exec -e test_number=$(echo $DEV_ID | cut -d '_' -f2) mycontain_nm sed -i '3s/topic: \/info\/map_at/topic: \/info\/map_at_'${test_number}'/' /usr/local/fig.yaml
docker exec -e test_number=$(echo $DEV_ID | cut -d '_' -f2) mycontain_nm sed -i '6s/mymap: false/mymap: true/' /usr/local/fig.yaml
docker restart mycontain_nm
docker exec mycontain_nm sed -n '6p' /usr/local/fig.yaml
###说明:
    Shell 中, 可以用等号 = 来定义变量。注意,等号两边不能有空格

Ros采集数据

timeout 30s rosbag record \
 /CAM01/camera/image_raw \
 /CAM02/camera/image_raw \ 
 --duration=3s  --split  -o  /data/test.bag

运行结束后查看 Ros采集的bag包

find ./ -maxdepth 1 -type f -iname "*.bag" | while read dir; do count=$(rosbag info -y -k topics $dir |wc -l); echo "$dir : $count "; done 	
find ./ -maxdepth 1 -type f -iname "*.bag" | while read file_nm;do cnt=$(rosbag info -y -k topics  $file_nm|grep "\-\ topic" |wc -l);echo "$file_nm: $cnt";done	

Linux命令说明

 linux系统中let命令在bash中用于计算,变量名前不用加$,可以实现自加和自减操作
   let 命令用于计算赋值表达式。它允许用户在脚本中定义变量并对其进行操作,同时将结果赋值给另一个变量
   arg中的运算符和操作数之间有空格,否则会产生错误
 echo cut  sed  timeout
 for in do if then else fi done
 docker ros 

可视化选项

 gnome-terminal:启动终端

标签:mycontain,nm,--,echo,filter,命令,交互式,Docker,docker
From: https://www.cnblogs.com/ytwang/p/17663070.html

相关文章

  • Windows sc 命令
    语法sc[<servername>]config[<servicename>][optionname=optionvalues]注意每个命令行选项(参数)必须包含等号作为选项名称的一部分。选项及其值之间需要一个空格(例如 ,type=own。如果省略空格,操作将失败)。参数servername指定服务所在的远程服务器的名称......
  • 禅道后台命令执行漏洞二
    漏洞简介禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效,功能完备丰富,操作简洁高效,界面美观大方,搜索功能强大,统计报表丰富多......
  • dos命令简单学习
    Dos命令打开命令行window+rcmd管理员身份右键window图标.命令dir查看目录cd/d目录名称进入目录cd:changedirectory通常情况下进入不同盘符中的文件需要两次命令:1.进入盘符,2.进入目录加入/d就可以直接进入不同盘符的目录同一盘符中更换目录,若使用/......
  • docker为已启动的容器添加端口映射
    针对已运行的容器添加端口映射1、查看容器是否映射端口dockerport[容器id或容器名]1有端口映射:无端口映射:2、查看容器完整Iddockerinspect[容器id]|grepId//得到以下结果//"Id":"fcae55f5180a79487662de426863565c7df05ed9b87854093b62776734928d25"......
  • 修改Docker镜像、容器、网络和卷等数据的存储位置|修改wsl在windows下的数据目录
    起因: 我发现这个C盘快要爆炸了C:\Users\Administrator\AppData\Local\Docker\wsl\data\ext4.vhdx(此目录是默认指向,都快100G了)解决步骤:wsl--shutdownwsl--exportdocker-desktop-dataE:\Docker\docker-desktop-data.tarwsl--unregisterdocker-deskto......
  • Git必要命令
    Git安装后必须先配置个人信息,以后的操作都会附带信息1#配置用户名2gitconfig--globaluser.name你的名字34#配置邮箱5gitconfig--globaluser.email你的邮箱查看个人信息可以使用1gitconfig--global--listGit基本理论Git在本地有三个工作区:工作目录(w......
  • 《MySQL命令行客户端》的使用方法
    MySQL客户端连接工具有多种,但最常用的是MySQL命令行客户端。下面是MySQL命令行客户端的语法:mysql-hhostname-uusername-ppassword-Ddatabase_name其中:-h 参数指定要连接的MySQL服务器的主机名或IP地址。-u 参数指定要连接的MySQL服务器的用户名。-p 参数提示输......
  • docker常用操作命令
    Docker是一种开源的容器化平台,它提供了一种轻量级的容器化解决方案,可以将应用程序及其依赖项打包成一个可移植的容器。以下是一些常用的Docker操作命令和手册:镜像操作:dockerimages:列出本地的镜像列表。dockerpull<image_name>:从Docker仓库中拉取指定的镜像。dockerpus......
  • docker和k8s
    dockerDocker是一种开源的容器化平台,它的主要目标是简化应用程序的部署和管理。通过使用Docker,开发人员可以将应用程序及其依赖项打包到一个称为容器的独立单元中,以便在不同的环境中进行部署和运行。Docker的主要用途包括:应用程序的隔离性:Docker容器提供了一种轻量级的虚拟......
  • anaconda命令手册
    如何在conda中删除环境https://www.python100.com/html/6F19GKG4SB48.htmlanaconda环境切换https://zhuanlan.zhihu.com/p/583034130condaenvlist切换到想要的虚拟环境,如my_envcondaactivatemy_env删除虚拟环境condaenvremove--my_env命令列表condaisatool......