我想编写一个脚本,由我的开发构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 ps的filter选项,这样您不会因为命令选项匹配您放置的名称而结束错误的容器grep的。 以下是我将如何删除任何类似docker集装箱,严格按照以下顺序 –
对于$中的container_id(docker ps --filter =“name = $ name”-q);执行docker stop $ container_id && docker rm $ container_id; done
对于$中的container_id(docker ps --filter =“name = $ name”-q -a);执行docker rm $ container_id; done
-a选项将包含所有容器,包括已停用的容器。 不使用-a ,默认选项,将只包含正在运行的容器。 因此,在第一步中,您将删除正在运行的容器,然后在第二步中继续执行停止的容器。 要删除或停止容器,只需要容器标识, -q选项只输出标识。