यह समस्या क्या है?
जब डेवलपर्सdocker run or dockercompose upजैसे कमांड का उपयोग करके डॉकर कंटेनर चलाते हैं , वे अक्सर निराशाजनक समस्या का सामना करते हैं जहां कंटेनर शुरू होता है लेकिन तुरंत गैर-शून्य स्थिति के साथ बाहर निकल जाता है। इसका मतलब यह है कि कंटेनर अपने इच्छित उद्देश्य, जैसे कि वेब सर्वर, डेटाबेस या एप्लिकेशन प्रक्रिया को चलाने के लिए जीवित नहीं रह रहा है। शुरुआती लोगों कोdocker ps aमें ‘कंटेनर कोड 0 के साथ बाहर निकल गया’ या ‘कोड 1 के साथ बाहर निकल गया’ जैसे संदेश दिखाई दे सकते हैं। आउटपुट, यह दर्शाता है कि कंटेनर के अंदर की प्रक्रिया तुरंत समाप्त हो गई है। यह समस्या Dockerfiles से निर्मित या Docker हब जैसी रजिस्ट्रियों से खींची गई छवियों के साथ काम करने वाले नए और अनुभवी दोनों उपयोगकर्ताओं को प्रभावित करती है।
📋 Table of Contents
जब डेवलपर्स docker run या dockercompose up जैसे कमांड का उपयोग करके Docker कंटेनर चलाते हैं, तो उन्हें अक्सर निराशाजनक समस्या का सामना करना पड़ता है जहां कंटेनर शुरू होता है लेकिन तुरंत एक गैर-शून्य st के साथ बाहर निकल जाता है…
यह समस्या उत्पादन और विकास परिवेश में आम है, जिसके कारण डाउनटाइम, विफल तैनाती और डिबगिंग समय बर्बाद होता है। डॉकर समुदाय सर्वेक्षण के अनुसार, 40% से अधिक कंटेनर ऑर्केस्ट्रेशन समस्याएं समय से पहले बाहर निकलने जैसे जीवनचक्र के मुद्दों से उत्पन्न होती हैं। इसे समझने के लिएdocker logs <container_id>के साथ लॉग की जाँच करना आवश्यक है सटीक त्रुटि देखने के लिए, लेकिन रूट अक्सर कंटेनर के एंट्रीपॉइंट या कमांड को कॉन्फ़िगर करने के तरीके में निहित होता है।
ऐसा क्यूँ होता है?

🎨 AI जेनरेटेड: ऐसा क्यों होता है?
मूल कारण लगभग हमेशा यह होता है कि कंटेनर के अंदर मुख्य प्रक्रिया (पीआईडी 1) निष्पादन समाप्त करती है और बाहर निकल जाती है। डॉकर कंटेनरों को तब तक चलने के लिए डिज़ाइन किया गया है जब तक उनकी प्राथमिक प्रक्रिया सक्रिय है; एक बार जब यह रुक जाता है, तो कंटेनर रुक जाता है। सामान्य ट्रिगर्स में एक शेल स्क्रिप्ट चलाना शामिल है जोtail f or node server.jsजैसे अग्रभूमि कमांड के बिना पूरा होता है , लापता निर्भरताएँ तत्काल क्रैश का कारण बनती हैं, या गलत डॉकरफ़ाइल निर्देश जो प्रक्रिया को जीवित नहीं रखते हैं। निकास कोड सुराग प्रदान करते हैं: कोड 0 का अर्थ सफल लेकिन सीमित निष्पादन है, जबकि कोड 1 गुम फ़ाइलों या अनुमति समस्याओं जैसी त्रुटियों को इंगित करता है।
दूसरा सामान्य कारणCMD or ENTRYPOINTका उपयोग करना है उन तरीकों से जो केवल पृष्ठभूमि प्रक्रियाओं को जन्म देते हैं। उदाहरण के लिए,CMD ["sh", "c", "echo hello"]वाली डॉकरफ़ाइल प्रतिध्वनि होगी और तुरंत बाहर निकल जाएगी। संसाधन की कमी, सिग्नल हैंडलिंग समस्याएं, या स्वास्थ्य जांच विफलताएं भी बाहर निकलने के लिए मजबूर कर सकती हैं। मल्टीस्टेज बिल्ड में या टिनी जैसे इनिट सिस्टम का उपयोग करते समय, गलत कॉन्फ़िगरेशन के कारण समान लक्षण उत्पन्न होते हैं। वास्तविक GitHub मुद्दों के डेटा से पता चलता है कि 70% मामलों में अग्रभूमि प्रक्रिया चूक शामिल है, बाकी केवल कंटेनरीकृत वातावरण में उजागर होने वाले एप्लिकेशन बग से जुड़े हैं।
चरणबद्ध समाधान
समस्या का निदान करने और उसे स्थायी रूप से ठीक करने के लिए इन चरणों का पालन करें। सबसे पहले, कंटेनर स्थिति और लॉग का निरीक्षण करें।
कोड
docker ps a
docker logs <container_id>
docker inspect <container_id> format='{{.State.ExitCode}}'
इसके बाद, CMD या ENTRYPOINT के लिए अपनी Dockerfile की जाँच करें। सुनिश्चित करें कि मुख्य एप्लिकेशन अग्रभूमि में चलता है। Node.js ऐप उदाहरण के लिए:
एसक्यूएल
FROM node:18alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "index.js"]
पुनर्निर्माण और परीक्षण:docker build t myapp . फिरdocker run d myapp. यदि शेल स्क्रिप्ट का उपयोग कर रहे हैं, तोexecजोड़ें शेल प्रक्रिया को बदलने के लिए:
बैश
#!/bin/sh
exec node index.js
से सत्यापित करें यह पुष्टि करने के लिए कि पीआईडी 1 आपका ऐप है। मजबूती के लिए डॉकरफाइल में स्वास्थ्य जांच जोड़ें:docker exec <container_id> ps auxकोड
प्रतिलिपि
HEALTHCHECK interval=30s CMD curl f http://localhost:3000 || exit 1
के साथ मॉनिटर करें वैकल्पिक समाधानdocker stats.
🎨 एआई उत्पन्न: वैकल्पिक समाधान

दृष्टिकोण 1: सिग्नलों को ठीक से संभालने के लिए डम्बिनिट या टिनी जैसी इनिट प्रक्रिया का उपयोग करें। डॉकरफ़ाइल को संशोधित करें:
औरRUN apk add nocache tini उसके बाद सीएमडी. यह ज़ोंबी प्रक्रियाओं को रोकता है और केवल इच्छित शटडाउन पर स्वच्छ निकास सुनिश्चित करता है।ENTRYPOINT ["/sbin/tini", ""]दृष्टिकोण 2: डिबगिंग के दौरान अस्थायी राहत के लिए पुनरारंभ नीतियों के साथ dockercompose पर स्विच करें:
. बेहतर अवलोकन के लिए लॉगिंग ड्राइवरों के साथ संयोजन करें।restart: unlessstoppedदृष्टिकोण 3: अतिसूक्ष्मवाद के लिए डिस्ट्रोलेस या स्क्रैच छवियों का लाभ उठाएं, लेकिन सुनिश्चित करें कि आपकी बाइनरी स्थिर रूप से जुड़ी हुई है और बिना शेल के पीआईडी 1 के रूप में चलती है। आधार छवियों की तुलना करें: अल्पाइन हल्का है लेकिन अनुकूलता के लिए डेबियन बनाम ग्लिबैक समस्याएं पैदा कर सकता है।
बचने के लिए सामान्य गलतियाँ
अग्रभूमि के बिना पृष्ठभूमि में डेमॉन चलाने से बचें, जैसे
बिनाnginx & बिनाtail f /var/log/nginx/access.log. .dockerignore फ़ाइलों को नज़रअंदाज न करें जो छवियों को फूला देती हैं और अप्रत्याशित व्यवहार का कारण बनती हैं। उत्पादन में कभी भी नवीनतम टैग का उपयोग न करें क्योंकि वे अपडेट से अप्रत्याशित निकास की ओर ले जाते हैं। मल्टीआर्क बिल्ड को छोड़ने से आर्किटेक्चर बेमेल हो सकता है। हमेशा Dockerfiles में संस्करणों को पिन करें और रजिस्ट्रियों पर जाने से पहले स्थानीय रूप से परीक्षण करें।
वास्तविक दुनिया का उदाहरण

🎨 एआई जेनरेटेड: रियलवर्ल्ड उदाहरण
एक ईकॉमर्स ऐप के लिए माइक्रोसर्विसेज सेटअप में, एक भुगतान सेवा कंटेनर OOM किल्स के कारण कोड 137 के साथ बाहर निकल गया। समाधान में कंपोज़ में संसाधन सीमाएँ जोड़ना शामिल था:deploy: resources: limits: memory: 512M औरjava jar app.jarके साथ अग्रभूमि जावा कमांड पर स्विच करना . लॉग से जीसी के रुकने का पता चला; जेवीएम झंडे को ट्यून करने के बाद, अपटाइम 99.9% तक पहुंच गया। इससे ब्लैक फ्राइडे पैमाने के दौरान घंटों के डाउनटाइम की बचत हुई।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: मैं कैसे जांचूं कि मेरा कंटेनर बाहर क्यों निकला? ए: रन कमांड विफल होने के तुरंत बाद डॉकर लॉग का उपयोग करें और निकास कोड का निरीक्षण करें।
प्रश्न: क्या पर्यावरण चर तत्काल निकास का कारण बन सकते हैं? उ: हां, यदि आवश्यक वर्र्स गायब हैं, तो उन्हें कंपोज़ में ई फ़्लैग या .env फ़ाइलों के माध्यम से जोड़ें।
प्रश्न: क्या यह कुबेरनेट्स में भिन्न है? ए: समान मूल कारण लेकिन डॉकर कमांड के बजाय डिबगिंग के लिए कुबेक्टल लॉग और पॉड स्थिति का उपयोग करें।
प्रश्न: क्या मुझे हमेशा आरएम ध्वज का उपयोग करना चाहिए? उत्तर: डिबगिंग के लिए हाँ, लेकिन लॉग निरीक्षण पोस्ट-एग्जिट की अनुमति देने के लिए उत्पादन से बचें।
प्रश्न: विंडोज़ कंटेनरों के बारे में क्या? उ: प्रक्रिया अलगाव सुनिश्चित करें और Dockerfiles में PowerShellआधारित अग्रभूमि कमांड का उपयोग करें।
निष्कर्ष

🎨 एआई उत्पन्न: निष्कर्ष
तुरंत बाहर निकलने वाले डॉकर कंटेनरों को ठीक करने के लिए पीआईडी 1 व्यवहार, उचित डॉकरफाइल कॉन्फ़िगरेशन और संपूर्ण लॉगिंग को समझने की आवश्यकता होती है। चरण-दर-चरण सुधारों, विकल्पों को लागू करके और ऊपर बताए गए सामान्य नुकसानों से बचकर, डेवलपर्स विश्वसनीय, लंबे समय तक चलने वाले कंटेनर प्राप्त कर सकते हैं। किसी भी डॉकर आधारित वर्कफ़्लो में तैनाती को सुव्यवस्थित करने और परिचालन ओवरहेड को कम करने के लिए इन प्रथाओं को लागू करें।
🚀 टेक वक्र से आगे रहें
दैनिक तकनीकी अंतर्दृष्टि, ईमानदार समीक्षाएँ और व्यावहारिक मार्गदर्शिकाएँ प्राप्त करें।
🔗 Share this article
✍️ Leave a Comment