Ubuntu 14.04(Trusty Tahr)では、実行中のコンテナを停止する方法を探しています。唯一の情報はDockerの実行コマンドで使用されたイメージ名です。
そのイメージ名と一致する実行中のすべてのコンテナーを見つけてそれらを停止するコマンドはありますか?
issue 8959 に従うと、良いスタートは次のようになります。
docker ps -a -q --filter="name=<containerName>"
name
はイメージ名ではなくコンテナを参照するので、もっと新しい Docker 1.9 filter ancestor を使う必要があります。 koekiebox 's answer に記載されています。
docker ps -a -q --filter ancestor=<image-name>
下記のように kiril でコメントされているので、それらのコンテナを削除します。
stop
はコンテナーも返します。
stop
とrm
をチェーニングすると、仕事ができます。
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
前の答えは私にはうまくいきませんでした、しかしこれはしました:
docker stop $(docker ps -q --filter ancestor=<image-name> )
コンテナ名を設定してコンテナを起動することができます。
docker run -d --name <container-name> <image-name>
同じイメージを使用して複数のコンテナーを回転させることができるので、これはコンテナーを開始するための良い方法です。それから、このcontainer-nameを使用して、コンテナを停止、接続...することができます。
docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
このコードはallイメージを含むコンテナcentos:6を停止します。もっと簡単な解決策は見つかりませんでした。
docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop
あるいはもっと短く:
docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')
コンテナの実行を停止する2つの方法
1. $docker stop container_ID
2. $docker kill container_ID
次のコマンドを使ってコンテナを動かすことができます。
$docker ps
詳細については、以下のリンクをクリックしてください。
情報とIDを持つすべてのコンテナをリストします
docker ps
docker stop CONTAINER ID
イメージ名でdockerコンテナを停止します。
imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,":"); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')
イメージ名とタグでdockerコンテナを停止します。
imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')
画像を作成した場合は、その画像に label を追加して、ラベルで実行中のコンテナをフィルタ処理できます
docker ps -q --filter "label=image=$image"
信頼できない方法
docker ps -a -q --filter ancestor=<image-name>
docker ps -a -q --filter="name=<containerName>"
イメージ名ではなく、コンテナー名でフィルターします。
docker ps | grep <image-name> | awk '{print $1}'
画像名が他の画像の他の列に現れるかもしれないので、問題があります
Dockerバージョン18.09.0の場合、フォーマットフラグは必要ないとわかりました
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
私の場合は--filter ancestor=<image-name>
が機能していなかったので、次のコマンドでDockerコンテナをクリーンアップしました。
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
これで十分でしょう。
イメージ名を取り込む/usr/local/bin/docker.stop
を作成しました(実行しているのが1つだけの場合)。
docker stop $(docker ps -q -f "name=$1")
私のDockerコマンドをgulpタスクでラップしようとしていましたが、次のことができることに気付きました。
docker stop container-name
docker rm container-name
これは同じ名前のコンテナが複数あるシナリオではうまくいかないかもしれませんが(可能であれば)、私のユースケースでは完璧でした。