सरल कमांड का उपयोग करके सभी चल रहे Docker कंटेनरों को रोकना सीखें। इससे आप सिस्टम संसाधनों का प्रबंधन कर सकेंगे और अपने Docker वातावरण को सुव्यवस्थित कर सकेंगे।
कंटेनरों को एक-एक करके रोकना आपके डेवलपमेंट वर्कफ़्लो को धीमा कर सकता है और माइक्रोसर्विसेज़ या मल्टी-कंटेनर एप्लिकेशन संभालते समय त्रुटियों का कारण बन सकता है।
इस गाइड में, मैं कई तरीके बताऊँगा जिनसे आप सभी चल रहे कंटेनरों को समाप्त कर सकते हैं।
इस ट्यूटोरियल के अंत तक, आप सक्षम होंगे:
समझना कि Docker सिग्नल और ग्रेस पीरियड को कैसे संभालता है
सरल CLI तकनीकों और फ़िल्टर का उपयोग करके सभी कंटेनर रोकना
सुगम वर्कफ़्लो के लिए Docker Compose और कस्टम उपनामों का लाभ उठाना
Docker कंटेनर टर्मिनेशन को समझना
कंटेनरों को बल्क में रोकने से पहले, यह समझना उपयोगी है कि Docker पर्दे के पीछे शटडाउन को कैसे ऑर्केस्ट्रेट करता है।
सिग्नल-आधारित प्रोसेस मैनेजमेंट
Docker ज़बरदस्ती टर्मिनेशन से पहले ग्रेसफुल शटडाउन का अनुरोध करने के लिए Unix सिग्नल का उपयोग करता है। docker stop कमांड का डिफ़ॉल्ट व्यवहार है:
SIGTERM कंटेनर की मुख्य प्रक्रिया को भेजना।
अधिकतम 10 सेकंड तक प्रतीक्षा करना (जिसे -t/--time से कॉन्फ़िगर किया जा सकता है)।
यदि प्रक्रिया बंद नहीं हुई है, तो SIGKILL भेजना।
SIGTERM: प्रक्रिया से विनम्रतापूर्वक सफाई कर बाहर निकलने का अनुरोध करता है।
ग्रेस पीरियड: ऐप्लिकेशनों को लॉग फ्लश करने, कनेक्शन बंद करने या स्टेट सहेजने का समय देता है।
SIGKILL: किसी भी अनुत्तरदायी प्रक्रिया को तुरंत समाप्त कर देता है।
कमांड-लाइन इंटरफ़ेस (CLI) के यांत्रिकी
डिफ़ॉल्ट रूप से, docker stop एक समय में एक कंटेनर संभालता है। आप शेल फीचर्स का उपयोग करके इसे कई कंटेनर रोकने तक बढ़ा सकते हैं।
# Stop a single container named my_containerdocker stop my_containerसंचालित द्वारा
यह my_container को SIGTERM भेजता है और आवश्यकता होने पर SIGKILL जारी करने से पहले डिफ़ॉल्ट 10 सेकंड प्रतीक्षा करता है।
# Stop all running containers at oncedocker stop $(dockerps-q)संचालित द्वारा
यहाँ, docker ps -q सभी चल रहे कंटेनरों के ID सूचीबद्ध करता है; वे ID docker stop को पास की जाती हैं, जो कंटेनरों को क्रमवार बंद करता है।
टर्मिनल का स्क्रीनशॉट जिसमें docker ps -q का आउटपुट docker stop में पाइप किया गया है
यदि कोई आवारा dockerd चाइल्ड प्रक्रिया बनी रहती है, तो उन्हें मैन्युअली समाप्त करें।
वास्तविक उदाहरण: एक प्रोजेक्ट में, जब एक माइग्रेशन अटका तो मैंने एक डेटाबेस कंटेनर पर docker kill का उपयोग किया। अचानक किल ने DB को ट्रांज़ैक्शन लॉग फ्लश करने से रोक दिया, जिससे InnoDB टेबल करप्ट हो गए। हमें बैकअप से रिस्टोर करना और बिनलॉग रीप्ले करने पड़े, जिससे 30 मिनट से अधिक का डाउनटाइम हुआ। इससे बचने के लिए, विस्तारित टाइमआउट के साथ docker stop को प्राथमिकता दें या अपनी एप्लिकेशन में उचित SIGTERM हैंडलर जोड़ें।
Permission denied त्रुटियाँ
उचित विशेषाधिकारों के बिना Docker कमांड चलाने से अक्सर त्रुटियाँ आती हैं:
कमांड के आगे sudo जोड़ें या docker समूह के उपयोगकर्ता के रूप में चलाएँ।
अपने उपयोगकर्ता को docker समूह में जोड़ें और दोबारा लॉग-इन करें:
लॉग आउट और फिर लॉग इन करने के बाद, आप बिना sudo के Docker कमांड चला सकते हैं। CI वातावरण में, पाइपलाइन विफलताओं से बचने के लिए सुनिश्चित करें कि रनर उपयोगकर्ता Docker समूह का सदस्य है।
Windows-विशिष्ट बातें
Windows PowerShell पर, सब-कमांड को कोष्ठक में रखें और Administrator के रूप में चलाएँ:
उच्चाधिकारों के साथ PowerShell लॉन्च करने से फ़ायरवॉल या एक्सेस-कंट्रोल समस्याएँ रुकती हैं। यदि आपको TLS हैंडशेक त्रुटियाँ दिखें, तो सत्यापित करें कि Docker Desktop के डेमन कॉन्फ़िगरेशन आपके PowerShell वातावरण से मेल खाते हैं।
निष्कर्ष
अपने सभी Docker कंटेनर कुशलता से रोकना समय बचाता है, संसाधन बचाता है, और आपके डेवलपमेंट वर्कफ़्लो में मानवीय त्रुटि को कम करता है। Docker के सिग्नल हैंडलिंग को समझकर, CLI फ़िल्टर का लाभ उठाकर, Docker Compose का उपयोग करके, और सरल उपनाम बनाकर आप एक स्वच्छ और पूर्वानुमानित वातावरण बनाए रख सकते हैं।
हैप्पी कंटेनराइज़िंग—और स्वच्छ, कुशल Docker वर्कफ़्लो के नाम!
FAQs
docker stop किस एग्जिट कोड को लौटाता है?⌄
सफल होने पर, docker stop 0 लौटाता है। गैर-शून्य एग्जिट कोड इंगित करता है कि एक या अधिक कंटेनर रुकने में विफल रहे।
क्या मैं कमांड चलाने से पहले देख सकता हूँ कि कौन-से कंटेनर रुकेंगे?⌄
हाँ—कमांड चलाने से पहले चल रहे कंटेनरों की सूची और ID या नाम सत्यापित करने के लिए docker ps या docker ps -q चलाएँ docker stop।
रिस्टार्ट नीतियाँ रुके हुए कंटेनरों को कैसे प्रभावित करती हैं?⌄
always जैसी रिस्टार्ट नीति वाले कंटेनर रुकने के बाद स्वचालित रूप से दोबारा शुरू हो जाएँगे। यदि आप चाहते हैं कि वे रुके रहें, तो docker update --restart=no <container> से नीति हटाएँ या संशोधित करें।
क्या नेटवर्क या वॉल्यूम के आधार पर कंटेनर रोके जा सकते हैं?⌄
हालाँकि Docker सीधे docker stop पर नेटवर्क या वॉल्यूम द्वारा फ़िल्टर नहीं करता, आप docker ps --filter "network=<name>" या docker ps --filter "volume=<name>" को कमांड सब्स्टिट्यूशन के साथ जोड़ सकते हैं।
मैं docker stop को CI/CD पाइपलाइन में कैसे एकीकृत कर सकता/सकती हूँ?⌄
अपने बिल्ड स्क्रिप्ट या CI जॉब में stop कमांड शामिल करें—लक्षित शटडाउन के लिए --signal और फ़िल्टर जैसे फ़्लैग का उपयोग करें, फिर उसी पाइपलाइन में क्लीनअप कमांड (docker system prune) चलाएँ।
क्या मैं बाद में सभी रुके हुए कंटेनरों को फिर से शुरू कर सकता/सकती हूँ?⌄
हाँ, docker start $(docker ps -a -q) का उपयोग करके सभी कंटेनरों को, जिनमें पहले से रुके हुए भी शामिल हैं, फिर से शुरू किया जा सकता है।
क्या सभी कंटेनर रोकने से वे हट जाते हैं?⌄
नहीं, कंटेनर रोकने से वे हटते नहीं हैं। वे तब तक आपकी प्रणाली पर बने रहते हैं जब तक आप उन्हें docker rm से हटाएँ नहीं।
मैं रोज़ाना कंटेनरों को स्वतः रोकना कैसे ऑटोमेट कर सकता/सकती हूँ?⌄
आप क्रॉन जॉब के साथ docker stop $(docker ps -q) कमांड चलाकर दैनिक स्वत: रोक शेड्यूल कर सकते हैं।
क्या docker stop वॉल्यूम या नेटवर्क को प्रभावित करता है?⌄
नहीं, कंटेनर रोकने से जुड़े वॉल्यूम या नेटवर्क पर प्रभाव नहीं पड़ता—वे जस के तस रहते हैं।
क्या मैं कुछ कंटेनरों को रोकने से बाहर रख सकता/सकती हूँ?⌄
आप docker ps के साथ फ़िल्टर का उपयोग करके या कमांड से विशिष्ट कंटेनर ID को बाहर रखकर चयनित रूप से कंटेनर रोक सकते हैं।
CLI कमांड के अलावा कौन-से टूल कंटेनरों के प्रबंधन में मदद कर सकते हैं?⌄
Portainer या Docker Desktop जैसे टूल GUI-आधारित प्रबंधन प्रदान करते हैं, जिससे शुरुआती लोगों के लिए कंटेनर कंट्रोल आसान हो जाता है।
मैं एक डेटा इंजीनियर और कम्युनिटी बिल्डर हूँ, जो डेटा पाइपलाइनों, क्लाउड, और AI टूलिंग के साथ काम करता/करती हूँ, साथ ही DataCamp और उभरते डेवलपर्स के लिए व्यावहारिक, असरदार ट्यूटोरियल लिखता/लिखती हूँ।
कंटेनरों को एक-एक करके रोकना आपके डेवलपमेंट वर्कफ़्लो को धीमा कर सकता है और माइक्रोसर्विसेज़ या मल्टी-कंटेनर एप्लिकेशन संभालते समय त्रुटियों का कारण बन सकता है।
इस गाइड में, मैं कई तरीके बताऊँगा जिनसे आप सभी चल रहे कंटेनरों को समाप्त कर सकते हैं।
इस ट्यूटोरियल के अंत तक, आप सक्षम होंगे:
Docker कंटेनर टर्मिनेशन को समझना
कंटेनरों को बल्क में रोकने से पहले, यह समझना उपयोगी है कि Docker पर्दे के पीछे शटडाउन को कैसे ऑर्केस्ट्रेट करता है।
सिग्नल-आधारित प्रोसेस मैनेजमेंट
Docker ज़बरदस्ती टर्मिनेशन से पहले ग्रेसफुल शटडाउन का अनुरोध करने के लिए Unix सिग्नल का उपयोग करता है।
docker stopकमांड का डिफ़ॉल्ट व्यवहार है:SIGTERMकंटेनर की मुख्य प्रक्रिया को भेजना।-t/--timeसे कॉन्फ़िगर किया जा सकता है)।SIGKILLभेजना।कमांड-लाइन इंटरफ़ेस (CLI) के यांत्रिकी
डिफ़ॉल्ट रूप से,
docker stopएक समय में एक कंटेनर संभालता है। आप शेल फीचर्स का उपयोग करके इसे कई कंटेनर रोकने तक बढ़ा सकते हैं।यह
my_containerको SIGTERM भेजता है और आवश्यकता होने पर SIGKILL जारी करने से पहले डिफ़ॉल्ट 10 सेकंड प्रतीक्षा करता है।यहाँ,
docker ps -qसभी चल रहे कंटेनरों के ID सूचीबद्ध करता है; वे IDdocker stopको पास की जाती हैं, जो कंटेनरों को क्रमवार बंद करता है।टर्मिनल का स्क्रीनशॉट जिसमें
docker ps -qका आउटपुटdocker stopमें पाइप किया गया हैइन अवधारणाओं को और विस्तार से समझने के लिए, Containerization and Virtualization Concepts देखें।
docker stop और docker kill की तुलना
ग्रेसफुल बनाम फोर्सफुल टर्मिनेशन के बीच चयन करने से आप अनचाहे परिणामों से बचते हैं।
ग्रेसफुल बनाम तुरंत टर्मिनेशन
कमांड
सिग्नल
व्यवहार
उपयोग परिदृश्य
docker stop
SIGTERM → टाइमआउट के बाद SIGKILL
सफाई के समय के साथ ग्रेसफुल शटडाउन
रूटीन मेंटेनेंस या अपडेट्स
docker kill
SIGKILL
तुरंत टर्मिनेशन
हैंग हुए कंटेनरों का आपातकालीन समाधान
सिग्नल कस्टमाइज़ेशन
दोनों कमांड डिफ़ॉल्ट को ओवरराइड करने के लिए
--signalफ़्लैग सपोर्ट करते हैं:ऊपर दिया गया कमांड प्रक्रियाओं को कस्टम क्लीनअप के लिए
SIGINTट्रैप करने देता है।जैसा देखा, जब आपका एप्लिकेशन विशिष्ट शटडाउन हुक लागू करता है, तो आप कस्टम सिग्नल का उपयोग कर सकते हैं।
एडवांस्ड कंटेनर स्टॉपिंग स्ट्रैटेजीज़
फ़िल्टरिंग और ऑटोमेटिंग के जरिए कंटेनर रोकना विशेष रूप से बड़े परिवेशों में अधिक सटीक DevOps वर्कफ़्लो सक्षम करता है।
मूल बातें समझने के बाद, आप यह फाइन-ट्यून कर सकते हैं कि किन कंटेनरों को रोकना है और प्रक्रिया को कैसे स्वचालित करना है।
फ़िल्टर्ड कंटेनर टर्मिनेशन
फ़िल्टर से आप इमेज नाम, स्टेटस, या लेबल जैसी विशेषताओं के आधार पर कंटेनरों को लक्षित कर सकते हैं:
ऊपर दिया गया कमांड केवल
my_image:latestपर आधारित कंटेनरों को रोकता है, जो मल्टी-सर्विस प्रोजेक्ट्स में लक्षित नियंत्रण देता है।उपयोग परिदृश्य:
--filter "ancestor=test:latest")--filter "label=env=dev")docker ps --filterके उपयोग का टर्मिनल स्क्रीनशॉटDocker Compose के साथ स्वचालित क्लीनअप
यदि आपकी सेवाएँ
docker-compose.ymlफ़ाइल में परिभाषित हैं, तो एक ही कमांड सभी संबंधित कंटेनरों को रोक देता है:यह एक स्वच्छ शटडाउन के लिए आपकी सर्विस डिपेंडेंसी और कॉन्फ़िगर किए गए टाइमआउट का सम्मान करता है।
और उन्नत तकनीकों के लिए, आप Intermediate Docker कोर्स पर विचार कर सकते हैं।
उपनाम-आधारित वर्कफ़्लो ऑप्टिमाइज़ेशन
दोहराए जाने वाले कार्यों के लिए, शेल उपनाम टाइपिंग और कॉन्टेक्स्ट स्विचिंग कम करते हैं:
शेल को रीलोड करने के बाद,
dsचलाने से एक ही कीस्ट्रोक में सभी कंटेनर रुक जाते हैं—तेज़ क्लीनअप के लिए आदर्श।Ubuntu WSL में सभी चल रहे कंटेनर रोकने के लिए 'ds' उपनाम का उपयोग
ऑपरेशनल सर्वोत्तम प्रथाएँ
अपने वातावरण को स्थिर और उच्च-प्रदर्शन बनाए रखने के लिए सुरक्षित शटडाउन रूटीन और नियमित क्लीनअप लागू करें।
docker killको आपातकालीन हस्तक्षेप के लिए सुरक्षित रखें; डेटा असंगतियों से बचें।-t/--time) समायोजित करें।docker system pruneजैसे कमांड के साथ पोस्ट-शटडाउन क्लीनअप ऑटोमेट करें।सामान्य समस्याओं का निवारण
सीधे-सादे कमांड भी अटक सकते हैं—इन्हें इस तरह संबोधित करें।
ज़ॉम्बी प्रक्रियाएँ और अनाथ वॉल्यूम
ज़बरदस्ती टर्मिनेशन से बासी प्रक्रियाएँ या अनाथ वॉल्यूम पीछे छूट सकते हैं, जो होस्ट संसाधन और डिस्क स्पेस खा सकते हैं। क्लीनअप के लिए:
यह उन सभी वॉल्यूम को हटा देता है जिनका किसी कंटेनर से संदर्भ नहीं है।
शेष Docker डेमन प्रक्रियाएँ जाँचें:
यदि कोई आवारा
dockerdचाइल्ड प्रक्रिया बनी रहती है, तो उन्हें मैन्युअली समाप्त करें।वास्तविक उदाहरण: एक प्रोजेक्ट में, जब एक माइग्रेशन अटका तो मैंने एक डेटाबेस कंटेनर पर
docker killका उपयोग किया। अचानक किल ने DB को ट्रांज़ैक्शन लॉग फ्लश करने से रोक दिया, जिससे InnoDB टेबल करप्ट हो गए। हमें बैकअप से रिस्टोर करना और बिनलॉग रीप्ले करने पड़े, जिससे 30 मिनट से अधिक का डाउनटाइम हुआ। इससे बचने के लिए, विस्तारित टाइमआउट के साथdocker stopको प्राथमिकता दें या अपनी एप्लिकेशन में उचितSIGTERMहैंडलर जोड़ें।Permission denied त्रुटियाँ
उचित विशेषाधिकारों के बिना Docker कमांड चलाने से अक्सर त्रुटियाँ आती हैं:
sudoजोड़ें याdockerसमूह के उपयोगकर्ता के रूप में चलाएँ।dockerसमूह में जोड़ें और दोबारा लॉग-इन करें:लॉग आउट और फिर लॉग इन करने के बाद, आप बिना
sudoके Docker कमांड चला सकते हैं। CI वातावरण में, पाइपलाइन विफलताओं से बचने के लिए सुनिश्चित करें कि रनर उपयोगकर्ता Docker समूह का सदस्य है।Windows-विशिष्ट बातें
Windows PowerShell पर, सब-कमांड को कोष्ठक में रखें और Administrator के रूप में चलाएँ:
उच्चाधिकारों के साथ PowerShell लॉन्च करने से फ़ायरवॉल या एक्सेस-कंट्रोल समस्याएँ रुकती हैं। यदि आपको TLS हैंडशेक त्रुटियाँ दिखें, तो सत्यापित करें कि Docker Desktop के डेमन कॉन्फ़िगरेशन आपके PowerShell वातावरण से मेल खाते हैं।
निष्कर्ष
अपने सभी Docker कंटेनर कुशलता से रोकना समय बचाता है, संसाधन बचाता है, और आपके डेवलपमेंट वर्कफ़्लो में मानवीय त्रुटि को कम करता है। Docker के सिग्नल हैंडलिंग को समझकर, CLI फ़िल्टर का लाभ उठाकर, Docker Compose का उपयोग करके, और सरल उपनाम बनाकर आप एक स्वच्छ और पूर्वानुमानित वातावरण बनाए रख सकते हैं।
अपनी कंटेनराइज़ेशन विशेषज्ञता को गहरा करने के लिए Containerization and Virtualization with Docker and Kubernetes ट्रैक या Intermediate Docker कोर्स देखें।
हैप्पी कंटेनराइज़िंग—और स्वच्छ, कुशल Docker वर्कफ़्लो के नाम!