docker批量启动关闭所有容器的操作

docker中

启动所有的容器命令

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker中

关闭所有的容器命令

docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

补充:shell批量启动和删除docker容器,基于docker toolbox

停止容器

stop.sh
#!/bin/bash
containerIDs="8f78b7e6995b beeae59c6f41 5305c3db3670 bffc551a6b96 61f0fc8b1dc4 8e85a3b7bfe3 d15c4d2dc546 2a3c4eb14584 5e98077acc3a 13bac087b83d"
statusLived="live"
statusdead="Dead"
notExistContainer="None"
retryCount=3
function GetContainerStatus(){
 containerExist=$(docker ps -a | grep -i $1 | wc -l )
 if [ ${containerExist} -gt 0 ]
 then
 pid=$(docker stats --format "{{.PIDs}}" --no-stream $1 )
 if [ "${pid}" != "0" ]
  then
  echo "${statusLived}"
 else
  echo "${statusdead}"
 fi
 else
 echo "${notExistContainer}"
 fi
}
function StopContainer(){
 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} not existed"
 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

说明:containerIDs里面是你已经建好的,docker容器这里为nginx

把stop.sh放在d:/nginx下面。

过程稍微慢了点,耐心等待。

停止容器成功。

启动容器

#!/bin/bash
containerIDs="8f78b7e6995b
 beeae59c6f41
 5305c3db3670
 bffc551a6b96
 61f0fc8b1dc4
 8e85a3b7bfe3
 d15c4d2dc546
 2a3c4eb14584
 5e98077acc3a
 13bac087b83d"
statusLived="live"
statusdead="Dead"
notExistContainer="None"
retryCount=3
function GetContainerStatus(){
 containerExist=$(docker ps -a | grep -i $1 | wc -l )
 if [ ${containerExist} -gt 0 ]
 then
 pid=$(docker stats --format "{{.PIDs}}" --no-stream $1 )
 if [ "${pid}" != "0" ]
  then
  echo "${statusLived}"
 else
  echo "${statusdead}"
 fi
 else
 echo "${notExistContainer}"
 fi
}
function StartContainer(){
 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} not existed"
 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Docker每次启动容器,IP及hosts指定的操作

    前言 每次在使用Docker启动Hadoop集群的时候,都需要重新绑定下网卡,固定IP,同时修改/etc/hosts文件,非常麻烦,于是想探寻下原因及优化. 一.原因 /etc/hosts, /etc/resolv.conf和/etc/hostname,容器中的这三个文件不存在于镜像,在启动容器的时候,通过mount的形式将这些文件挂载到容器内部.因此,如果在容器中修改这些文件的话,修改部分不会存在于容器的top layer,而是直接写入这三个物理文件中. 为什么重启后修改内容不存在了?原因是:

  • docker容器内要启动两个进程时Dockerfile的实现代码

    近期想做一个cron定时任务的docker,在Dockerfile中做如下定义 FROM library/alpine:latest RUN apk --update add rsync openssh bash VOLUME ["/data"] ADD start.sh / CMD ["/bin/bash","/start.sh"] 在start.sh中用crontab 加载定时任务run.cron,然后启动crond: /usr/bin/cr

  • docker文件存放路径, 获取容器启动命令操作

    容器早已创建好,如何得知它的启动参数(数据挂载到哪) #假设通过如下命令启动了一个容器 docker run -d --name mysql\ -p 3306:3306\ -e MYSQL_ROOT_PASSWORD=123456\ --restart=always\ mysql:5.5 --character-set-server=utf8 #如何通过容器名得知启动参数 [root@jenkins ~]# docker inspect mysql_cdh [ { "Id": &quo

  • 详解Shell脚本控制docker容器启动顺序

    1.遇到的问题 在分布式项目部署的过程中,经常要求服务器重启之后,应用(包括数据库)能够自动恢复使用.虽然使用docker update --restart=always containerid能够让容器自动随docker启动,但是并不能保证是在数据库启动之后启动,如果数据库未启动,那么将导致应用启动失败;网上还有一种解决方法是通过docker-compose容器编排来控制启动顺序,这个博主研究的比较少. 2.解决思路 使用Shell脚本来控制,思路大致如下 探测数据库端口来检验数据库是否启动成

  • docker修改未启动容器的配置信息操作

    之前一开始用docker并没有使用dockerfile或者docker-compose编排服务,直接使用docker run启动的容器,结果一不小心配置文件出错或者给停掉了那就导致服务再也启动不了了,这时候不要着急,使用以下办法既可以修改配置文件还可以修改启动容器的端口信息和其他配置信息,这样容器中的文件和数据还是存在的. 1.修改容器内的配置信息 这里以nginx启动为例子,比如用docke run创建了一个nginx的容器,结果因为使用docker exec ** bash 修改了内部ngi

  • 解决docker容器启动后马上退出的问题

    最近在看docker如何让容器在启动时直接运行某些进程,后来发现Dockerfile可以在容器启动的时候指定容器运行命令. CMD指定,但是每个Dockerfile只能有一条CMD指令,如果指定了多条CMD指定,只有最后一条会被执行. 于是就想了一个办法,在写了一个脚本,在脚本里面启动多个进程,在Dockerfile里运行这个脚本. 最后证明这个方法是可行的,在实验过程中遇到一个问题,容器启动后会马上停止. 经查阅资料: Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,

  • docker批量启动关闭所有容器的操作

    docker中 启动所有的容器命令 docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中 关闭所有的容器命令 docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) 补充:shell批量启动和删除docker容器,基于docker toolbox 停止容器 stop.sh #!/bin/bash containerIDs="8f78b7e6995

  • Docker 使用nsenter工具进入容器的操作

    在使用Docker容器的时候,利用nsenter工具会比较方便,如果我们的系统没有的话,那就需要我们自己来安装了 1.首先访问该网址找到最新版本的nsenter工具 2.然后下载nsenter工具的源码到我们的主机上 输入命令: # wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-2.32.tar.gz 3.解压.tar.gz包 # tar -xzvf util-linux-2.32

  • Docker批量容器编排的实现

    简介 Dockerfile build run 是手动操作单个容器,假如使用微服务架构,需要启动 100 + 个容器,他们之间的依赖关系如何维护? Docker Compose 用来轻松高效地管理容器,定义运行多个容器. 三个步骤: Dockerfile Services & docker-compose.yml docker-compose up 初体验 1.Dockerfile FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py

  • Docker 启动Redis 并设置密码的操作

    redis使用 redis version 5的apline(阿尔卑斯)镜像,小巧快速 新建一个docker-compose.yml文件 直接启动,不需连接密码配置如下: version: '3.3' services: cache: image: redis:5-alpine restart: always ports: - "6379:6379" 端口映射为: 6379 (redis默认端口) 在docker-compose.yml文件的目录下运行下面指令,启动Redis: doc

  • Docker绑定固定IP/跨主机容器互访操作

    前言 之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自带的network实现固定ip分配,并且重启不会消失. 环境介绍 服务器IP 容器分配网段 启动容器的ID 192.168.1.105 172.172.0.0/24 172.172.0.10 192.168.1.106 172.172.1.0/24 172.172.1.10 绑定步骤 先操作1

  • docker自定义网桥docker0及docker的开启,关闭,重启命令操作

    问题 公司将服务器迁移后,docker默认创建的doker0网桥与公司的外网网关产生冲突, 导致外网无法连接服务器. 解决方式 修改默认的配置文件 /etc/docker/daemon.json对Docker进行配置. 如果没有直接创建 1.关闭 docker服务 systemctl stop docker 2.修改bip { "bip": "192.168.0.1/24", # 修改此处 .... } 3.重启docker systemctl restart do

  • docker已启动容器修改添加端口映射的两种方法

    目录 简述 一.先提交,在配置 1.先将容器提交为镜像 2.创建新的容器并运行 二. 修改配置文件 1.关闭docker服务 2.修改hostconfig.json 3.修改config.v2.json 4.重启 docker服务 5.查看配置项已经修改成功 补充:docker容器怎么开端口 总结 简述 正常情况下,在你创建容器时可以添加多个端口映射,写法如下 每个端口映射都加一个-p docker run -itd --name centos -p 4000:8081 -p 3306:3306

  • 详解Springboot应用启动以及关闭时完成某些操作

    一:启动时完成数据加载等需求 实现ApplicationListener接口,官方文档截图: ApplicationListener接口的泛型类可以使用ApplicationStartedEvent和ApplicationReadyEvent 应用监听器事件执行先后顺序如下: ApplicationStartingEvent ApplicationEnvironmentPreparedEvent ApplicationPreparedEvent ApplicationStartedEvent A

随机推荐