イメージ名によるDockerコンテナーの停止-Ubuntu


156

Ubuntu 14.04(Trusty Tahr)では、実行中のコンテナーを停止する方法を探しています。私が持っている唯一の情報は、Docker runコマンドで使用されたイメージ名です。

そのイメージ名に一致するすべての一致する実行中のコンテナーを検索して停止するコマンドはありますか?

回答:


210

8959号に続いて、適切なスタートは次のとおりです。

docker ps -a -q --filter="name=<containerName>"

以来nameを指しコンテナではなく、画像の名前、あなたは、より新しい使用する必要がありますドッカー1.9フィルタの祖先で述べたように、koekiebox答えを

docker ps -a -q  --filter ancestor=<image-name>

以下でkirilがコメントしたように、それらのコンテナを削除するには:

stop コンテナも返します。

だから、チェーン化stoprm仕事をします。

docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))

これは素晴らしい。その後の私の問題は、コンテナを削除するときです。コンテナはsttopされているため、docker pdによって返されません。それを行う方法の手がかりはありますか?
キリル

@kiril停止コンテナはによって返されps -aます。削除されたコンテナ...削除されましたが、もう存在していません。
VonC、2015

1
おかげで、ストップコンテナーも返されることに気付きませんでした。したがって、stopとrmをチェーンすると、次のようになります。docker rm $(docker stop $(docker ps -a -q --filter = "name = <imageName>"))
kiril

@kirilはい、そうです。
VonC、2015


44

コンテナー名を設定してコンテナーを開始できます。

docker run -d --name <container-name> <image-name>

同じイメージを使用して複数のコンテナーを起動することができるので、これはコンテナーを開始する良い方法です。次に、このコンテナ名を使用して停止、アタッチ...コンテナ:

docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>

私はこのソリューションが本当に好きです。コンテナをビルド、停止/削除してから実行するより良い方法はありますか?sudo docker build . -t <img-name> && sudo docker stop <container-name> || true && sudo docker run -d --rm --name <container-name> <img-name>
melanke

16

このコードは、イメージcentos:6を持つすべてのコンテナーを停止します。そのためのより簡単な解決策を見つけることができませんでした。

docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop

またはさらに短い:

docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')

1
改善が必要
:::: docker

@Shaileshkumarがバージョンを追加しました=)
ArgonQQ 2017

9

コンテナーの実行を停止する2つの方法:

1. $docker stop container_ID

2. $docker kill container_ID

次のコマンドを使用して、実行中のコンテナを取得できます。

$docker ps

詳細については、次のリンクを参照してください。


最後のリンクは壊れています(「申し訳ありませんが、そのページが見つかりません」)。
Peter Mortensen

文字通り$dockerですか?または$シェルプロンプトからですか?
Peter Mortensen

2

Dockerバージョン18.09.0の場合、フォーマットフラグは必要ないことがわかりました

docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))

2

イメージ名で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}')

イメージを作成した場合は、それにラベルを追加し、実行中のコンテナーをラベルでフィルタリングできます

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}'

画像名が他の画像の他の列に表示される可能性があるため、問題があります


1

/usr/local/bin/docker.stopイメージ名を取り込むを作成しました(実行しているのが1つだけであると想定しています)。

docker stop $(docker ps -q -f "name=$1")

1

私はDockerコマンドをgulpタスクでラップしようとしていて、次のことを実行できることに気付きました。

docker stop container-name
docker rm container-name

これは、(可能であれば)同じ名前のコンテナが複数あるシナリオでは機能しない可能性がありますが、私のユースケースでは完璧でした。


1

私の場合--filter ancestor=<image-name>は機能していなかったため、次のコマンドでDockerコンテナーをクリーンアップしました。

docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))


1

@VonCのすばらしい回答に加えて、.zshrcファイルに追加できるZSH関数を次に示します。

dockstop() {
  docker rm $(docker stop $(docker ps -a -q --filter ancestor="$1" --format="{{.ID}}"))
}

次に、コマンドラインで実行するだけで、dockstop myImageNamemyImageNameというイメージから開始されたすべてのコンテナーが停止して削除されます。



0

使用:docker container stop $(docker container ls -q --filter ancestor = mongo)

    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    d394144acf3a        mongo               "docker-entrypoint.s…"   15 seconds ago      Up 14 seconds       0.0.0.0:27017->27017/tcp   magical_nobel
    (base) :~ user$ docker container stop $(docker container ls -q --filter ancestor=mongo)
    d394144acf3a
    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    (base) :~ user$

0

簡単なAWKアプローチを好む場合は、こちらが私の見解です。

docker rm -f $(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')

$(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}') -入力画像に基づいてDockerコンテナー名を印刷します

docker ps -すべてのコンテナを一覧表示します

awk '{ if($2 == "<your-image-name>") { print $NF}}'-の2番目に解析された列docker psは、イメージ名を示します。これをイメージ名と比較するとprint $NF、コンテナー名が出力されます。

docker rm -f コンテナを削除します

たとえば、ubuntuイメージの実行中のすべてのコンテナーを削除するには、次のように簡単に実行できます。

docker rm -f $(docker ps | awk '{ if($2 == "ubuntu:latest") { print $NF}}')

PS:イメージタグは同等のコンパレータであるため、AWKに忘れずに含めてください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.