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.执行结果,根据关键字执行

最新文章

  1. ios app 打包上传 app store(Application Loader)
  2. GTD中落地执行篇
  3. Spring中使用Quartz
  4. Java for LeetCode 141 Linked List Cycle
  5. Windows环境配置Apache+Mysql+PHP
  6. 9. Android框架和工具之 SlidingMenu(抽屉菜单)
  7. 使用Chrome+node-inspector查找NodeJS内存泄漏
  8. ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller
  9. java学习笔记(13) —— google GSON 实现json转化方法
  10. 2013第39周一Web打印
  11. Linux系统编程:客户端-服务器用FIFO进行通信
  12. Oracle 生成一张测试表并插入随机数据
  13. BitMap 算法
  14. Ubuntu16下Hive 安装
  15. 点评cat系列-应用集成
  16. 安装xgboost
  17. ImageMagick: 6.8.3 升级到 6.8.9 遇到的问题
  18. P1006 传纸条-洛谷luogu-dp动态规划
  19. Sprint 冲刺第二阶段之1---5天(上)
  20. unity操作Hierarchy视图下同名的对象

热门文章

  1. Angularjs——初识AngularJS
  2. MAC上好用的解压工具
  3. 自己的devc++的语法配置
  4. ASP.NET 6.0 Core 迁移 ASP.NET Core 7.0
  5. angular小练习--手写弹出窗口以及文件上传或者复制粘贴,后读取打印文件内容
  6. vue-3 this概念
  7. TCP通信的客户端代码实现-TCP通信的服务器端代码实现
  8. HTTP协议拓展
  9. 2023.1.13 [网络流24题] 餐巾计划问题 LuoguP1251
  10. 为Jekyll静态网站添加PlantUML插件