docker一键启动命令

sh auto.sh [start|restart|stop] [keywords...]

keywords可选(包含编号,镜像名,容器名称,端口)

其中defaultList为默认列表,不使用keywords时执行此列表

#!/bin/bash
defaultList=(redis rabbitmq mysql postgres kong:2.3)
#赋初值
serverList=${defaultList[*]}
#参数校验
if [ $# -lt 1 ]; then
echo "参数错误!"
echo "格式:auto.sh [start|restart|stop] [keywords...]"
exit 8
fi
if [ $# -eq 1 ]; then
if [ $1 != "start" -a $1 != "restart" -a $1 != "stop" ]; then
echo "参数错误!"
echo "格式:auto.sh [start|restart|stop] [keywords...]"
exit 8
fi
else
serverList=${*:2}
fi

case "$1" in
start)
echo "正在启动服务......"
echo "================"
for i in ${serverList[@]}; do
#检查容器数量
allNum=$(docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | wc -l)
if [ $allNum -eq 0 ]; then
echo $i"启动失败!原因:服务不存在,可执行以下命令查看详情!"
echo 'docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep '$i
elif [ $allNum -gt 1 ]; then
echo $i"启动失败!原因:存在2个以上容器,请确保关键字唯一,可执行以下命令查看详情!"
echo 'docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep '$i
else
#输出容器名称
runNameNew=$(docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | awk '{ print $3}')
#检查是否启动
runId=$(docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | awk '{ print $1}')
if [ "$runId" == "" ]; then
docker start $(docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | awk '{ print $1}')
sleep 1s
#校验是否成功启动
runNum_new=$(docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | wc -l)
if [ $runNum_new -eq 1 ]; then
echo $runNameNew"启动完成"
else
echo $runNameNew"启动失败!原因:未知错误!"
fi
else
echo $runNameNew"已启动,无需重新启动"
fi
fi
echo ""
done
echo "================"
echo "服务启动完成......"
;;

stop)
echo "正在停止服务......"
echo "================"
for i in ${serverList[@]}; do
#检查容器数量
runNum=$(docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | wc -l)
if [ $runNum -eq 0 ]; then
echo $i"未启动,不用停止"
elif [ $runNum -gt 1 ]; then
echo $i"停止失败!原因:存在2个以上运行容器,请确保关键字唯一,可执行以下命令查看详情!"
echo 'docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep '$i
else
#输出容器名称
runNameNew=$(docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | awk '{ print $3}')
docker stop $(docker ps --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | awk '{ print $1}')
sleep 1s
#校验是否停止成功
runNum_new=$(docker ps -a --format "table {{.ID}} {{.Image}} {{.Names}} {{.Ports}}" | grep $i | wc -l)
if [ $runNum_new -eq 1 ]; then
echo $runNameNew"已停止"
else
echo $runNameNew"停止失败!原因:未知错误!"
fi
fi
echo ""
done
echo "================"
echo "服务停止完成......"
;;
restart)
#$0表示文件本身
#$@传递输入参数:2从第二个起
sh $0 stop ${serverList[*]}
echo "===即将重新启动==="
sleep 1.5s
sh $0 start ${serverList[*]}
;;
esac

1.执行结果,启动默认

2.执行结果,根据关键字执行

docker自动化启动停止脚本的更多相关文章

  1. Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  2. Linux Oracle服务启动&停止脚本与开机自启动[转]

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  3. 【转】Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设置相关参数,首先先介 ...

  4. redis 启动停止脚本

    redis 启动停止脚本,该redis需要密码登录,如没有密码,去掉stop函数里的 -a #!/bin/sh # #chkconfig: 2345 80 90 # Simple Redis init ...

  5. (转)Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  6. SpringBoot项目快速启动停止脚本

    SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...

  7. win nginx + php bat启动/停止脚本

    启动脚本 @echo offREM Windows 下无效REM set PHP_FCGI_CHILDREN=5 REM 每个进程处理的最大请求数,或设置为 Windows 环境变量set PHP_F ...

  8. 微服务linux启动停止脚本

    # 停止脚本#!/bin/bash #其他服务停止脚步可以通过修改APP_MAIN参数即可 APP_MAIN=com.idoipo.infras.eureka.center.Application t ...

  9. Ubuntu 启动停止脚本

    /etc/init.d 目录下的开机启动脚本 1. more redis_8010 #/bin/sh #Configurations injected by install_server below. ...

  10. Spring boot centos部署启动停止脚本

    原文地址:http://www.cnblogs.com/skyblog/p/7243979.html 使用脚本启动和关闭服务,centos下的脚本启动和关闭可以如下: start(){ now=`da ...

随机推荐

  1. C#动态创建对象过程

    创建对象环境 获取当前应用程序集引用的类库详细信息,动态类也将调用此类库 obj类为项目动态编译时用到的模版类,主要提取其using信息用于动态生成的类使用     1 AssemblyName[]r ...

  2. strapi系列--如何自定义非界面化的接口,定制化自己的业务逻辑

    为什么要进行后端定制呢? 在实际开发过程中,项目中有些需求是不需要创建界面化接口的,需要我们定制化自己的业务逻辑,那么我们该如何处理这个需求呢?本文以图文并茂的形式,定制一个我们自己的业务逻辑接口. ...

  3. 新下载了一个框架,然后npm install时候报错npm ERR! Maximum call stack size exceeded

    今天遇到这个npm ERR! Maximum call stack size exceeded报错 解决方案如下: 1.更新npm版本 //查看版本 npm -v //更新 npm install - ...

  4. Linux简易入门

    安装Linux系统 VMware安装 首先安装VMware VMware下载地址 在镜像网站下载镜像,直接进行安装 虚拟机安装 镜像下载地址 这里使用\(16.04\)版本 点击创建新的虚拟机 根据向 ...

  5. Java 进阶P-8.3+P-8.4

    捕捉到的异常 捉到了做什么? 拿到异常对象之后 String getMessage(); String toSTring(); void printStackTrace(); 但是肯定时回不去了,而具 ...

  6. 遗传算法求TSP问题

    一.实验内容及目的 本实验以遗传算法为研究对象,分析了遗传算法的选择.交叉.变异过程,采用遗传算法设计并实现了商旅问题求解,解决了商旅问题求解最合适的路径,达到用遗传算法迭代求解的目的.选择.交叉.变 ...

  7. Blazor嵌套传递

    实现创建一个Blazor Server空的应用程序 创建一个Tab.razor 并且添加以下代码 <div> @Title </div> @code { [CascadingP ...

  8. FreeRTOS使用汇总

    /**********创建任务**************/ TaskHandle_t Hardware_TaskHandle; //任务句柄,如果不用到消息,可不用句柄 void main (voi ...

  9. 软件设计师考试备考之UML

    UML 统一建模语言是面向对象软件的标准化建模语言. 事务 结构事务 UML模型中的名称,它们通常是模型的静态部分,描述概念或物理元素 图形表示: 行为事务 UML模型中的动态部分.它们是模型中的动词 ...

  10. 线段树优化DP学习笔记 & JZOJ 孤独一生题解

    在 \(DP\) 的世界里 有一种题需要单调队列优化 \(DP\) 一般在此时,\(f_i\) 和它的决策集合 \(f_j\) 在转移时 \(i\) 不和 \(j\) 粘在一起(即所有的 \(j\) ...