docker的shell脚本ps -a | grepfind运行某些容器的数目

我想编写一个脚本,由我的开发构build服务器执行,在构build和运行新容器之前将删除所有“类似的”泊坞窗容器。

下面是我需要的bash脚本的伪代码

var name = $1 var number_of_results = # of containers returned from $(docker ps -a | grep "$name") if(number_of_result > 0) docker rm -f $(docker ps -a | grep "$name") 

以下脚本应该做你想要的:

 #!/bin/bash name=$1 matchingStarted=$(docker ps --filter="name=$name" -q | xargs) [[ -n $matchingStarted ]] && docker stop $matchingStarted matching=$(docker ps -a --filter="name=$name" -q | xargs) [[ -n $matching ]] && docker rm $matching 

基本上,它会检查是否有提供名称的正在运行的容器,如果find它,则停止它。 然后,它删除提供的名称的任何容器。

注意 :您可能需要添加一些参数validation,就像没有参数一样,此脚本将停止所有正在运行的容器并删除所有已停止的容器。 我没有在这里添加它,以保持简单易读。

您必须考虑至less两种情况 – 删除已停止的容器,可以使用单个命令删除停止的容器,并删除正在删除的容器必须首先停止运行的容器。

除此之外,代替使用grep来查找容器名称,我将使用docker psfilter选项,这样您不会因为命令选项匹配您放置的名称而结束错误的容器grep的。 以下是我将如何删除任何类似docker集装箱,严格按照以下顺序 –

  1. 删除运行的容器
 对于$中的container_id(docker ps --filter =“name = $ name”-q);执行docker stop $ container_id && docker rm $ container_id; done 
  1. 移除已停止的容器,因为我们在步骤1中停止了运行容器。
 对于$中的container_id(docker ps --filter =“name = $ name”-q -a);执行docker rm $ container_id; done 

-a选项将包含所有容器,包括已停用的容器。 不使用-a ,默认选项,将只包含正在运行的容器。 因此,在第一步中,您将删除正在运行的容器,然后在第二步中继续执行停止的容器。 要删除或停止容器,只需要容器标识, -q选项只输出标识。