新しいコンテナーをビルドして実行する前に、「類似した」Dockerコンテナーを削除する開発ビルドサーバーによって実行されるスクリプトを記述したいと思います。
以下は、必要な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
基本的に、提供された名前で実行中のコンテナがあるかどうかをチェックし、見つかった場合は停止します。次に、指定された名前のコンテナを削除します。
注:引数なしで使用する場合、このスクリプトは実行中のすべてのコンテナーを停止し、停止したすべてのコンテナーを削除するため、いくつかの引数検証を追加することができます。シンプルで読みやすくするために、ここには追加しませんでした。
少なくとも2つのケースを考慮する必要があります-単一のコマンドで削除できる停止したコンテナーの削除と、削除する前にコンテナーを最初に停止する必要がある実行中のコンテナーの削除。
これに加えて、コンテナ名を見つけるためにgrep
を使用する代わりに、docker ps
のfilter
オプションを使用するので、間違ってgreppingすることはありませんコマンドオプションがgrepに配置した名前と一致しているという理由だけでコンテナ。ここに私が同様のDockerコンテナを削除する方法があります、厳密に以下のシーケンスに従ってください-
$(docker ps --filter = "name = $ name" -q);のcontainer_idの場合、docker stop $ container_id && docker rm $ container_id; done
$(docker ps --filter = "name = $ name" -q -a);のcontainer_idの場合、docker rm $ container_id; doneを実行
-a
オプションには、停止したコンテナを含むすべてのコンテナが含まれます。デフォルトのオプションである-a
を使用しない場合、実行中のコンテナのみが含まれます。したがって、ステップ1で実行中のコンテナーを削除し、次にステップ2で停止したコンテナーを続行します。コンテナーを削除または停止するには、コンテナーIDだけが必要です。-q
オプションはIDのみを出力します。