Recently, I often need to manually start or stop docker in daily testing, so I decided to write a Shell script to replace manual operation. In addition, the script can also be called remotely through a Python script, as shown below: Currently, the script hard-codes the Container ID in the script. Of course, you can also control it by passing parameters to the script. You can modify it. Start DockerThe startup script is as follows: #!/bin/bash containerIDs="ad3e4d7fc407 a228730a915f ad3e4d7fc4099" statusLived="live" statusdead="Dead" notExistContainer="None" retryCount=3 function GetContainerStatus(){ containerExist=$(sudo docker ps -a | grep -i $1 | wc -l ) if [ ${containerExist} -gt 0 ] then pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 ) if [ "${pid}" != "0" ] then echo "${statusLived}" else echo "${statusdead}" fi else echo "${notExistContainer}" fi } function StartContainer(){ sudo docker restart $1 } for containerID in ${containerIDs} do for((i=1;i<=${retryCount};i++)) do status=$(GetContainerStatus ${containerID} ) echo "Container ${containerID} status is ${status}" if [ "${status}" == ${statusLived} ] then echo "Container ${containerID} already running" break fi if [ "${status}" == ${notExistContainer} ] then echo "Container ${containerID} did not exist" break fi if [ "${status}" == ${statusdead} ] then echo "Container ${containerID} stopped ,start container" StartContainer ${containerID} verifyStatus=$(GetContainerStatus ${containerID} ) if [ "${verifyStatus}" == ${statusLived} ] then echo "start container ${containerID} success " break else echo "${i} retry start container" StartContainer ${containerID} fi fi done done Stop DockerThe stop script is as follows: #!/bin/bash containerIDs="589bda1309cd ad3e4d7fc407 a228730a915f ad3e4d7fc4099" statusLived="live" statusdead="Dead" notExistContainer="None" retryCount=3 function GetContainerStatus(){ containerExist=$(sudo docker ps -a | grep -i $1 | wc -l ) if [ ${containerExist} -gt 0 ] then pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 ) if [ "${pid}" != "0" ] then echo "${statusLived}" else echo "${statusdead}" fi else echo "${notExistContainer}" fi } function StopContainer(){ sudo docker stop $1 } for containerID in ${containerIDs} do for ((i=1;i<=${retryCount};i++)) do status=$(GetContainerStatus ${containerID} ) echo "Container ${containerID} status is ${status}" if [ "${status}" == ${statusdead} ] then echo "Container ${containerID} already stopped" break fi if [ "${status}" == ${notExistContainer} ] then echo "Container ${containerID} did not exist" break fi if [ "${status}" == ${statusLived} ] then echo "Container ${containerID} is lived ,stop container" StopContainer ${containerID} verifyStatus=$(GetContainerStatus ${containerID} ) if [ "${verifyStatus}" == ${statusdead} ] then echo "stop container ${containerID} success" break else echo "${i} retry stop container" StopContainer ${containerID} fi fi done done Python calling scriptThe Python sample script is as follows: import paramiko def StartContainer(svr,port,user,pwd): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(svr,port=port, username=user, password=pwd,timeout=5) client.exec_command("cd /home/TestCode/ && bash startContainer.sh") def StopContainer(svr,port,user,pwd): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(svr, port=port, username=user, password=pwd, timeout=5) client.exec_command("cd /home/TestCode/ && bash stopContainer.sh ") Summarize The above is what I introduced to you about using Shell scripts to batch start and stop Docker services. I hope it will be helpful to you! You may also be interested in:
|
<<: MySQL index cardinality concept and usage examples
>>: Vue implements student management function
The installation process of MySQL 8.0 Windows zip...
If the server's images are hotlinked by other...
1. Environment version Docker version 19.03.12 ce...
This article shares the MySQL installation and co...
Table of contents Basic Introduction Getting Star...
pthread_create function Function Introduction pth...
Table of contents Case Study Update account balan...
Table of contents Preface Global parameter persis...
The concept of relative path Use the current file...
Table of contents 1. Background Architecture Prob...
1. Computed properties and listeners 1.1 Computed...
Table of contents Packaging, launching and optimi...
Preface 1. Benchmarking is a type of performance ...
Original URL: http://segmentfault.com/blog/ciaocc/...
Flexible layout (Flexbox) is becoming increasingl...