Docker kapsayıcılarını görüntü adına göre durdurma - Ubuntu


156

Ubuntu 14.04'te (Trusty Tahr) Çalışan bir kapsayıcıyı durdurmanın bir yolunu arıyorum ve sahip olduğum tek bilgi Docker çalıştırma komutunda kullanılan görüntü adı.

Bu görüntü adıyla eşleşen tüm çalışan kapsayıcıları bulma ve durdurma komutu var mı?

Yanıtlar:


211

Aşağıdaki sorunu 8959 , iyi bir başlangıç olacaktır:

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

Yana nameatıfta konteyner değil görüntü adı, daha yeni kullanmanız gerekir Docker 1.9 filtre atası belirtilen, koekiebox 'ın cevabı .

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

Aşağıda kiril tarafından yorumlandığı gibi , bu kapları kaldırmak için:

stop kapları da döndürür.

Yani zincirleme stopve rmişi yapacak:

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

Bu harika. Bundan sonra benim sorun kapları kaldırılır, çünkü onlar sttoped, onlar docker pd tarafından iade edilmez. Nasıl yapılacağına dair ipuçları var mı?
kiril

@kiril durdurulan konteyner tarafından iade edilir ps -a. Kaldırılan kaplar ... iyi onlar kaldırılır, onlar yok artık.
VonC

1
Teşekkürler, konteynırları da iade etmenin farkına varamadım. Böylece zincirleme durdurma ve rm işi yapacak: docker rm $ (docker stop $ (docker ps -a -q --filter = "name = <imageName>"))
kiril

@kiril Fikir bu, evet.
VonC


44

Kapsayıcı adını bir kapsayıcı adı ayarlayarak başlatabilirsiniz:

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

Aynı görüntü birden fazla kabı döndürmek için kullanılabilir, bu yüzden bir kabı başlatmanın iyi bir yoludur. Sonra kapsayıcıyı durdurmak, iliştirmek ... için bu kapsayıcı adını kullanabilirsiniz:

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

Bu çözümü gerçekten çok seviyorum. Bir kap oluşturmak, durdurmak / kaldırmak ve daha sonra çalıştırmak için daha iyi bir yol var mı? sudo docker build . -t <img-name> && sudo docker stop <container-name> || true && sudo docker run -d --rm --name <container-name> <img-name>
melanke

16

Bu kod , görüntü centosu olan tüm kapları durduracaktır: 6 . Bunun için daha kolay bir çözüm bulamadım.

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

Veya daha da kısa:

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

1
iyileştirme gerekiyor :::: docker stop $ (docker ps -a | grep centos: 6 | awk '{print $ 1}')
Shailesh kumar

@Shaileshkumar Sürümünüzü ekledi =)
ArgonQQ

9

Bir konteyner çalıştırmayı durdurmanın iki yolu:

1. $docker stop container_ID

2. $docker kill container_ID

Aşağıdaki komutu kullanarak kapsayıcıları çalıştırabilirsiniz:

$docker ps

Daha fazla bilgi için aşağıdaki bağlantılar:


Son bağlantı koptu ( "Üzgünüz, bu sayfayı bulamıyoruz" ).
Peter Mortensen

Kelimenin tam anlamıyla $dockermı? Yoksa $kabuk isteminden mi?
Peter Mortensen

2

Docker 18.09.0 sürümü için biçim bayrağına gerek olmadığını buldum

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

2

Docker kapsayıcısını resim adına göre durdur:

imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,":"); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')

Docker kapsayıcısını resim adı ve etikete göre durdurun:

imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')

Görüntüyü oluşturduysanız, ona bir etiket ekleyebilir ve çalışan kapları etikete göre filtreleyebilirsiniz

docker ps -q --filter "label=image=$image"

Güvenilmez yöntemler

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

her zaman çalışmaz

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

resim adına göre değil, konteyner adına göre filtreler

docker ps | grep <image-name> | awk '{print $1}'

resim adı diğer resimler için diğer sütunlarda görünebileceğinden sorunludur


1

/usr/local/bin/docker.stopResim adını alan bir tane yaptım (sadece bir tane çalıştığınızı varsayar).

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

1

Docker komutlarımı yutkunma görevlerine sarmaya çalışıyordum ve aşağıdakileri yapabileceğinizi fark ettim:

docker stop container-name
docker rm container-name

Bu, aynı adda birden fazla kapsayıcıya sahip olduğunuz senaryolar (bu mümkün ise) işe yaramayabilir, ancak kullanım durumum için mükemmeldi.


1

Benim durumumda --filter ancestor=<image-name>çalışmadı, bu yüzden aşağıdaki komut Docker kapsayıcısını benim için temizledi:

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

1

bilgi ve kimliğe sahip tüm kapsayıcıları listele

docker ps

docker stop CONTAINER ID

1

@VonC mükemmel yanıtın üstüne ekleyerek, işte .zshrc dosyanıza ekleyebileceğiniz bir ZSH işlevi:

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

Daha sonra komut satırınızda, bunu yapın dockstop myImageNameve myImageName adlı bir görüntüden başlatılan tüm kapları durduracak ve kaldıracaktır.



0

kullanın: docker konteyner stop $ (docker konteyner ls -q --filter acestor = 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

Basit bir AWKyaklaşımı tercih etmek istiyorsanız , işte benim isteğim:

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

$(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}') - docker kapsayıcı adlarını giriş görüntüsüne göre yazdırır

docker ps - tüm kapları listele

awk '{ if($2 == "<your-image-name>") { print $NF}}'- İkinci ayrıştırılmış sütunu docker psresim adını verir. print $NFKapsayıcı adını yazdıran görüntü adınızla karşılaştırılır .

docker rm -f kapları çıkarır

Örneğin, ubuntu görüntüsünün tüm çalışan kaplarını kaldırmak, aşağıdaki gibi basit bir şekilde yapılabilir:

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

Not: Eşit bir karşılaştırıcı olduğu için resim etiketini AWK'ye eklemeyi unutmayın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.