सवाल 'डॉकर स्टॉप' और 'डॉकर किल' के बीच क्या अंतर है?


के बीच क्या अंतर है docker stop तथा docker kill?

अफैक, दोनों एक चल रहे कंटेनर को रोक देंगे। क्या ये वही है docker stop कंटेनर के अंदर सही तरीके से चलने वाली प्रक्रिया को रोकने के प्रयासों को, जबकि docker kill एक हत्या संकेत भेज देंगे? यदि ऐसा है तो कैसे होगा docker stop जानें कि चल रही प्रक्रिया को सही तरीके से कैसे रोकें। (चूंकि यह प्रक्रिया से प्रक्रिया में भिन्न है)


89
2018-05-21 12:54


मूल




जवाब:


क्या यह डॉकर स्टॉप को सही तरीके से कंटेनर के अंदर चलने वाली प्रक्रिया को रोकने का प्रयास करता है, जबकि डॉकर मार एक हत्या संकेत भेज देगा?

असल में हाँ, अंतर सूक्ष्म है, लेकिन इसमें उल्लिखित है कमांड लाइन संदर्भ:

  • डॉकर स्टॉप: एक चल रहे कंटेनर को रोकें (अनुग्रह अवधि के बाद SIGTERM, और फिर सिगकिल भेजें) [...] कंटेनर के अंदर मुख्य प्रक्रिया SIGTERM प्राप्त करेगी, और एक अनुग्रह अवधि के बाद, सिगकिल। [जोर मेरा]
  • डॉकर मारो: एक चल रहे कंटेनर को मार डालो (सिगकिल, या निर्दिष्ट सिग्नल भेजें) [...] कंटेनर के अंदर मुख्य प्रक्रिया सिगकिल, या विकल्प - सिग्नल के साथ निर्दिष्ट किसी भी संकेत भेजा जाएगा। [जोर मेरा]

इसलिए stop मानक भेजकर एक सुंदर शट डाउन ट्रिगर करने का प्रयास करता है पॉज़िक्स संकेत  SIGTERM, जहाँ तक killबस डिफ़ॉल्ट रूप से प्रक्रिया को मारता है (लेकिन यह भी कोई अन्य सिग्नल भेजने की अनुमति देता है):

SIGTERM सिग्नल को इसकी समाप्ति का अनुरोध करने के लिए एक प्रक्रिया में भेजा जाता है। सिग्कील सिग्नल के विपरीत, इसे प्रक्रिया द्वारा पकड़ा और व्याख्या या अनदेखा किया जा सकता है। यह प्रक्रिया को उचित समाप्ति संसाधनों को जारी करने और उपयुक्त होने पर राज्य को बचाने की अनुमति देता है। यह ध्यान दिया जाना चाहिए कि SIGINT लगभग SIGTERM के समान है।

वैसे भी लागू नहीं होने पर, आमतौर पर प्रक्रियाओं को संभालने की अपेक्षा की जाती है SIGTERM कृपापूर्वक और उनकी जिम्मेदारियों के आधार पर सही चीज करें - यह ग्रेस अवधि से अधिक समय तक लेने वाले शानदार शटडाउन प्रयास के कारण आसानी से विफल हो सकता है, हालांकि डेटा अखंडता सर्वोपरि (उदा। डेटाबेस के लिए) पर विचार करने के लिए कुछ ऐसा है; उदाहरण देखें मेजर हेडन का सिग्टर बनाम सिगकिल अधिक विस्तृत स्पष्टीकरण के लिए:

एक बार SIGTERM प्राप्त होने के बाद यह निर्धारित कर सकता है कि एप्लिकेशन क्या करना चाहता है। जबकि अधिकांश एप्लिकेशन अपने संसाधनों को साफ करेंगे और रोक देंगे, कुछ नहीं हो सकते हैं। एक SIGTERM प्राप्त होने पर कुछ पूरी तरह से अलग करने के लिए एक एप्लिकेशन कॉन्फ़िगर किया जा सकता है। साथ ही, यदि एप्लिकेशन खराब स्थिति में है, जैसे कि डिस्क I / O की प्रतीक्षा, यह भेजा गया सिग्नल पर कार्य करने में सक्षम नहीं हो सकता है।


85
2018-05-22 14:12



तो अगर मैं कंटेनरों के लिए एक सामान्य शटडाउन प्रक्रिया चाहता था, तो मुझे पर्यवेक्षक / रनिट प्रक्रिया में SIGTERM पकड़ना होगा? - CMCDragonkai
यहाँ सबसे अच्छा अभ्यास क्या है? मैं समझता हूं कि हम क्यों उपयोग करेंगे docker kill शट डाउन के दौरान कुछ समय बचाने के लिए हाथ से, लेकिन एक स्क्रिप्ट में, क्या हमेशा एक सुंदर शट डाउन के माध्यम से प्रयास करना बेहतर नहीं होगा docker stop? मैं अभी भी बहुत कुछ देख रहा हूँ docker killहालांकि स्क्रिप्ट में एस है। - Dennis


docker kill अचानक मुख्य प्रविष्टि प्रक्रिया / कार्यक्रम को रोक देगा

docker stop इसे गर्व से रोकने की कोशिश करेंगे (विनम्रता से पूछेंगे: पी)

दोनों मामलों में फाइल सिस्टम परिवर्तन जारी रहेगा (स्टॉप या मारने के समय) तो यदि आप docker start <container> तो यह वहां से जारी रहेगा।


6
2018-04-29 14:24



... लेकिन मामले में docker kill किसी लंबित फ़ाइल सिस्टम में परिवर्तन होता है कि स्मृति में अभी भी मुख्य प्रक्रिया खो जाएगी, इसलिए फ़ाइल सिस्टम क्षतिग्रस्त हो सकता है? - Arjan
जाहिर है, चूंकि एक अचानक स्टॉप है, केवल हत्या के समय में बदलाव ही जारी रहेगा। लंबित कुछ भी खो जाएगा। मेरा मुद्दा यह था कि डॉकर मार वास्तव में नहीं है ... कंटेनर को मारना, इसकी प्रक्रिया को रोकना। जैसे कि जब आप अपने कंप्यूटर को बंद करने के बजाए बंद कर देते हैं - awkwardarts


और पहले जोड़े गए उत्तरों के अलावा

दौड़ना docker events बाद docker stop घटनाओं को दिखाता है

  • मारो (सिग्नल 15): जहां सिग्नल 15 = सिग्टरएम
  • मरना
  • रुकें

दौड़ना docker events बाद docker kill घटनाओं को दिखाता है

  • मारो (सिग्नल 9): जहां सिग्नल 9 = सिगकिल
  • मरो (बाहर निकलें कोड 137)

docker stop प्रक्रिया को मारने से पहले एक समय समाप्ति है। डिफॉल्ट दस सेकंड है।

यह मेज़ और भी विवरण है।


0
2017-11-03 07:51