docker自动化启动停止脚本
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自动化启动停止脚本的更多相关文章
- Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- Linux Oracle服务启动&停止脚本与开机自启动[转]
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- 【转】Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设置相关参数,首先先介 ...
- redis 启动停止脚本
redis 启动停止脚本,该redis需要密码登录,如没有密码,去掉stop函数里的 -a #!/bin/sh # #chkconfig: 2345 80 90 # Simple Redis init ...
- (转)Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- SpringBoot项目快速启动停止脚本
SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...
- win nginx + php bat启动/停止脚本
启动脚本 @echo offREM Windows 下无效REM set PHP_FCGI_CHILDREN=5 REM 每个进程处理的最大请求数,或设置为 Windows 环境变量set PHP_F ...
- 微服务linux启动停止脚本
# 停止脚本#!/bin/bash #其他服务停止脚步可以通过修改APP_MAIN参数即可 APP_MAIN=com.idoipo.infras.eureka.center.Application t ...
- Ubuntu 启动停止脚本
/etc/init.d 目录下的开机启动脚本 1. more redis_8010 #/bin/sh #Configurations injected by install_server below. ...
- Spring boot centos部署启动停止脚本
原文地址:http://www.cnblogs.com/skyblog/p/7243979.html 使用脚本启动和关闭服务,centos下的脚本启动和关闭可以如下: start(){ now=`da ...
随机推荐
- 《Effective C++》继承与面向对象设计
Item 32:确定你的public继承塑膜出is-a的关系 如果你令class D以public继承class B,你便是告诉编译器说,每一个类型为D的对象同时也是一种B对象,反之如果你需要一个D对 ...
- 今天试试NuxtJS
nuxt可以大幅缩短首屏加载时间 Progressive Web App (PWA) Support 渐进式web应用 简单说 就是让你的web应用表现的就像本地应用一样,可以添加快捷方式 打开的时候 ...
- 设置多个系统---vue-el-admin
1. 修改\src\settings.js const ppp= { title: 'XXXX System', titleZH: 'XXXX系統', flag: 'ppp' } const syst ...
- Keepalived高可用集群部署
KeepAlived 目录 KeepAlived KeepAlived安装 KeepAlived部署 准备工作 主备模式 节点配置 验证 正常状态 故障 故障恢复 1+N(一主多备)模式 节点配置 验 ...
- css边框,盒子模型、浮动、定位
边框,盒子模型.浮动.定位 一.边框 border-width : 边框宽度 border-style : 边框样式 1.solid 实线 2.none 无边框 3.dotted 点状虚线边框 4.d ...
- 反射概述-获取字节码Class对象的三种方式
反射概述 判定结果∶*红色:失败*绿色:成功*一般我们会使用断言操作来处理结果*Assert.assertEquals(期望的结果,运算的结果);补充∶*Before:*修饰的方法会在测试方法之前被自 ...
- 【分析笔记】全志方案通过命令行操作 GPIO 口(带源码分析)
前言说明 在项目开发初期,很经常会需要临时操作某个GPIO来验证某些功能,可以通过编写一个简单的驱动程序来操作,但更方便的是可以通过命令行直接操作 GPIO ,这样不需要经过编写代码.编译驱动.推入文 ...
- 平台工程101:Dev、Sec和Ops的自动化黏合剂
国际权威知名调研机构 Gartner 在<2023年最重要的10个技术趋势>报告中将平台工程(Platform Engineering)列为高速发展的技术趋势之一,并预测到2026年80% ...
- drf-day8——断点调试、认证.权限.频率的源码分析、基于APIView编写分页、全局异常处理
目录 一.断点调试使用 二.认证,权限,频率源码分析(了解) 2.1 权限类的执行源码 2.2 认证源码分析 2.3 频率源码分析 2.4 自定义频率类(了解) 2.5 SimpleRateThrot ...
- 11月30日内容总结——前端简介、http协议概念、html协议概念及基础知识和部分标签的讲解
目录 一.前端与后端的概念 什么是前端开发? 什么是后端? 学习前端的目的 前端三剑客 二.前端前戏 三.HTTP协议 1.四大特性 2.报文格式 3.响应状态码 四.HTML概览 1.HTML简介 ...