छवि नाम से डॉकटर कंटेनरों को रोकना - उबंटू


156

उबंटू 14.04 (भरोसेमंद तहर) में मैं एक चल रहे कंटेनर को रोकने का एक तरीका खोज रहा हूं और मेरे पास एकमात्र जानकारी छवि नाम है जो डॉकर रन कमांड में इस्तेमाल किया गया था।

क्या सभी मिलान चल रहे कंटेनरों को खोजने के लिए एक आदेश है जो उस छवि के नाम से मेल खाते हैं और उन्हें रोकते हैं?

जवाबों:


210

अंक 8959 के बाद , एक अच्छी शुरुआत होगी:

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

चूंकि कंटेनरname को संदर्भित करता है और छवि का नाम नहीं है, आपको कोएकीबॉक्स के उत्तर में उल्लिखित अधिक हाल के डॉकटर 1.9 फिल्टर पूर्वज का उपयोग करने की आवश्यकता होगी ।

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

उन कंटेनरों को निकालने के लिए किरील द्वारा नीचे टिप्पणी की गई है :

stop कंटेनरों को भी लौटाता है।

तो जंजीर stopऔर rmकाम करेंगे:

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

यह भी खूब रही। कंटेनरों को हटाने के बाद मेरी समस्या यह है कि जब से उन्हें रोका जाता है, वे docker pd द्वारा वापस नहीं आते हैं। कैसे करना है इसका कोई सुराग?
किरिल

@ किरील बंद कंटेनर द्वारा लौटाए जाते हैं ps -aहटाए गए कंटेनर ... अच्छी तरह से उन्हें हटा दिया जाता है, वे अब मौजूद नहीं हैं।
VonC

1
धन्यवाद, मुझे नहीं पता था कि स्टॉप कंटेनर को भी लौटाता है। तो स्टॉपिंग चेन और आरएम काम करेंगे: docker rm $ (docker stop $ (docker ps -a -q --filter = "name = <imageName>"))
kiril

@ अंकिल यही विचार है, हाँ।
वॉन

63

पिछले उत्तर मेरे काम नहीं आए, लेकिन यह किया:

docker stop $(docker ps -q --filter ancestor=<image-name> )

1
वहाँ पूर्वज का दिलचस्प उपयोग ( docs.docker.com/engine/reference/commandline/ps/#filtering )। +1
वॉनसी

1
विंडोज के लिए डॉकर टर्मिनल पर भी काम करता है।
Koekiebox

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

यह कोड इमेज सेंटोस के साथ सभी कंटेनरों को रोक देगा : 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 stop $ (docker ps -a | grep centos: 6 | awk '{प्रिंट $ 1}')
शैलेश कुमार

@ श्लेषकुमार ने अपना संस्करण =)
ArgonQQ

9

कंटेनर चलाने से रोकने के दो तरीके:

1. $docker stop container_ID

2. $docker kill container_ID

आप निम्न कमांड का उपयोग करके रनिंग कंटेनर प्राप्त कर सकते हैं:

$docker ps

अधिक जानकारी के लिए निम्न लिंक:


अंतिम लिंक टूट गया है ( "क्षमा करें, हम उस पृष्ठ को नहीं खोज सकते" )।
पीटर मोर्टेंसन

क्या यह सचमुच है $docker? या $शेल प्रॉम्प्ट से है?
पीटर मोर्टेंसन

2

डॉकर संस्करण 18.09.0 के लिए मैंने पाया कि प्रारूप ध्वज की आवश्यकता नहीं होगी

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

2

छवि नाम से डॉकटर कंटेनर बंद करें:

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

छवि नाम और टैग द्वारा डॉकटर कंटेनर को रोकें:

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चित्र नाम में एक ऐसा बना दिया (मान लिया कि आपके पास केवल एक ही चल रहा है)।

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

1

मैं अपने डॉक कमांड को टटोलने के काम में लपेटने की कोशिश कर रहा था और महसूस किया कि आप निम्नलिखित कार्य कर सकते हैं:

docker stop container-name
docker rm container-name

यह उन परिदृश्यों के लिए काम नहीं कर सकता है जहां आपके पास एक ही नाम (यदि यह संभव है) के साथ कई कंटेनर हैं, लेकिन मेरे उपयोग के मामले के लिए यह एकदम सही था।


1

मेरे मामले --filter ancestor=<image-name>में काम नहीं कर रहा था, इसलिए निम्न आदेश ने मेरे लिए डॉकटर कंटेनर को साफ किया:

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


1

@VonC शानदार उत्तर के शीर्ष पर जोड़ना, यहाँ एक ZSH फ़ंक्शन है जिसे आप अपनी .zshrc फ़ाइल में जोड़ सकते हैं:

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

फिर अपनी कमांड लाइन में, बस करो dockstop myImageNameऔर यह सभी कंटेनरों को रोक देगा और हटा देगा जो कि myImageName नामक एक छवि से शुरू किए गए थे।



0

उपयोग: docker कंटेनर स्टॉप $ (docker कंटेनर ls -q --filter पूर्वज = मोंगो)

    (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 ps - सभी कंटेनरों को सूचीबद्ध करें

awk '{ if($2 == "<your-image-name>") { print $NF}}'- docker psछवि का दूसरा पार्स किया गया कॉलम छवि का नाम देता है। आपकी छवि नाम के साथ तुलना करने print $NFसे कंटेनर नाम प्रिंट होता है।

docker rm -f कंटेनरों को निकालता है

उदाहरण के लिए, उबंटू छवि के सभी चल रहे कंटेनरों को हटाकर, बस इस प्रकार किया जा सकता है:

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

PS: AWK में छवि टैग को शामिल करना याद रखें, क्योंकि यह एक समान तुलनित्र है।


-5

आप psचल रहे कंटेनरों पर एक नज़र डालने के लिए कमांड का उपयोग कर सकते हैं :

docker ps -a

वहां से आपको अपने कंटेनर का नाम कंटेनर आईडी के साथ देखना चाहिए जिसे आप खोज रहे हैं। यहाँ के बारे में अधिक जानकारी हैdocker ps


लिंक टूट गया है ( क्षमा करें, हमें वह पृष्ठ नहीं मिल सकता है )।
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.