मैं सिस्टम बूट में डॉकटरों को ऑटो-स्टार्ट कैसे कर सकता हूं?


113

सिस्टम बूट होने पर स्वचालित रूप से डॉक कंटेनर शुरू करने का एक अच्छा तरीका क्या है?

क्या उबंटू 14.04 पर ऐसा करने का एक पसंदीदा तरीका है?

मैंने supervisordपूर्व में वेब एप्लिकेशन शुरू करने के लिए उपयोग किया है। लेकिन यह डॉकर के लिए सही बात नहीं है।

जवाबों:


136

जाहिरा तौर पर, डॉकटर कंटेनरों ( डॉकर 1.2 से ) को चालू करने के लिए वर्तमान विधि पुनरारंभ नीतियों का उपयोग करने के लिए है । यह नियंत्रित करेगा कि स्टार्टअप पर कंटेनर को शुरू करने और बाहर निकलने पर कंटेनर को फिर से शुरू करने के लिए डॉकर को कैसे संभालना चाहिए। मैंने अब तक 'हमेशा' विकल्प का उपयोग किया है, और यह पुष्टि कर सकता है कि यह सिस्टम बूट पर डॉकटर को ऑटो-स्टार्ट करता है:

sudo docker run --restart=always -d myimage

प्रलेखन अंश

डार्ट चलाने पर रीस्टार्ट फ्लैग का उपयोग करके पुनः आरंभ नीतियां आप एक कंटेनर से बाहर निकलने के बाद दोबारा शुरू नहीं किया जाना चाहिए या नहीं, इसके लिए आप एक पुनरारंभ नीति निर्दिष्ट कर सकते हैं।

नहीं - बाहर निकलने पर कंटेनर को पुनरारंभ न करें।

ऑन-विफलता - कंटेनर को केवल तभी चालू करें जब वह एक गैर शून्य निकास स्थिति के साथ बाहर निकलता है।

हमेशा - हमेशा बाहर निकलने की स्थिति की परवाह किए बिना कंटेनर को पुनरारंभ करें।

आप उस समय की अधिकतम राशि भी निर्दिष्ट कर सकते हैं, जब डॉकर ऑन-फेल नीति का उपयोग करते हुए कंटेनर को पुनः आरंभ करने का प्रयास करेगा। डिफ़ॉल्ट यह है कि डॉकटर कंटेनर को पुनः आरंभ करने के लिए हमेशा के लिए प्रयास करेगा।

$ sudo docker run --restart=always redis

यह रेडिस कंटेनर को हमेशा की पुनरारंभ नीति के साथ चलाएगा ताकि यदि कंटेनर बाहर निकलता है, तो डॉकर इसे पुनः आरंभ करेगा।

$ sudo docker run --restart=on-failure:10 redis

यह ऑन-फेल की पुनः आरंभ नीति और 10. की अधिकतम पुनरारंभ संख्या के साथ रेडिस कंटेनर को चलाएगा। यदि रेडिस कंटेनर एक गैर-शून्य निकास स्थिति के साथ एक पंक्ति में 10 से अधिक बार बाहर निकलता है तो डॉकर कंटेनर को पुनः आरंभ करने की कोशिश में गर्भपात कर देगा। एक अधिकतम पुनरारंभ सीमा प्रदान करना केवल विफलता नीति के लिए मान्य है।


12
"हमेशा - हमेशा बाहर निकलने की स्थिति की परवाह किए बिना कंटेनर को पुनरारंभ करें" थोड़ा भ्रमित है। यह कंटेनर को पुनरारंभ नहीं करेगा यदि आप मैन्युअल रूप से कंटेनर से बाहर निकलें / रोकें, जो कि वह व्यवहार है जिसकी मुझे तलाश थी।
w00t

12
नोट: एक अन्य नीति unless-stoppedको जोड़ा गया था। यह ऐसा काम करता है alwaysलेकिन अगर कंटेनर को रोक दिया जाता है और सिस्टम को रिबूट कर दिया जाता है या डॉकटर डेमॉन को पुनरारंभ कर दिया जाता है, तो कंटेनर पुनरारंभ नहीं होगा। सभी 4 विकल्पों में से एक अच्छा लिखने के लिए यहां देखें। ब्लॉग। सीज़नशिप।…
डेविड मोरालेस

4
बेशक, dockerडेमॉन को इसका समर्थन करने के लिए ऑटो-स्टार्ट करना होगा।
sherrellbc

मुझे लगता है कि सवाल "सिस्टम बूट पर" पूछ रहा है, जिसका अर्थ है कि भौतिक या आभासी सर्वर रिबूट होने के बाद, कैसे कंटेनर ऑटो-पुनरारंभ होता है, यह मानते हुए कि डॉक इंजन सर्वर रिबूट के बाद पूरी तरह से चल रहा है?
रूट लूप

8

डॉकर के पास यह पृष्ठ है जो यह बताता है कि इसे कैसे करना है upstart और systemd के साथ। मैं मानता हूं कि यह डॉकर के लिए सही बात नहीं लगती। उनका हल चलाना है docker start, जो मानता है कि आपने अपना कंटेनर पहले ही बना लिया है। मुझे लगता है कि आप या तो ऊपर docker run --rmकी पटकथा में करेंगे (इसे एक नई प्रक्रिया और एक छवि से कंटेनर की तरह का इलाज करना) या बस docker डेमॉन को बूट पर ही कंटेनर को फिर से शुरू करने दें (क्योंकि यह डिफ़ॉल्ट रूप से होगा यदि आप और कुछ नहीं करते हैं )। अपस्टार्ट में आसान स्टार्ट / स्टॉप ऑफ प्रोसेस की अनुमति देने का लाभ है, लेकिन आपको डॉकटर के स्टार्ट / स्टॉप के साथ भी मिलता है!

मुझे लगता है कि अपस्टार्ट स्क्रिप्ट काम करने से पहले उपयोगकर्ता को मैन्युअल रूप से एक कंटेनर (सभी सही पोर्ट / वॉल्यूम बाइंडिंग के साथ) बनाने के लिए मजबूर करना अजीब है।


लिंक टूटा हुआ है ... यह एक संभावित प्रतिस्थापन की तरह लगता है, लेकिन यह निश्चित रूप से "कैसे" नहीं दिखाता है
गर्ट वैन डेन बर्ग

धन्यवाद, मैंने एक समान पृष्ठ का लिंक तय कर दिया है, लेकिन मुझे यकीन नहीं हो रहा है कि यह वही कहता है जो मूल ने किया था।
लॉरेंस केस्टेलूट

6

लेकिन यह डॉकर के लिए सही बात की तरह महसूस नहीं करता है।

क्यों नहीं?

मैं बड़ी सफलता के साथ इसके लिए पर्यवेक्षक का उपयोग करता हूं।

आप जो जानते हैं उसका उपयोग करें, जो काम करता है उसका उपयोग करें, कुछ ऐसा उपयोग करें जिसे आप आसानी से बनाए रख सकें और समझ सकें।


धन्यवाद @ EEAA .. इसका मतलब है कि आप उन्हें गैर-डेमॉन मोड में चलाते हैं? क्या इसका मतलब यह भी नहीं है कि आपको उन्हें चलाने की आवश्यकता है --rm?
स्टीफन अरेंटेज़

मैं कंटेनरों को अग्रभूमि मोड में चलाता हूं और पर्यवेक्षक को stdout / stderr को पकड़ने देता हूं। मुझे यकीन नहीं है कि --rmयहां प्रासंगिक क्यों है।
EEAA

@EEAA: अपने प्रश्न के बारे में: कुछ लोगों के लिए, dockerके लिए एक स्थानापन्न है lxcया openvzजो lxc.start.auto = 1और vzctl set --onboot yes। इसके अलावा ESXi और अन्य वर्चुअलाइजेशन समाधान में ऐसी सुविधा शामिल है। लॉरेंस की तरह, मुझे भी नहीं लगता कि इस तरह के ऑटोस्टार्ट फीचर को वितरण-विशिष्ट तरीके से लागू किया जाना चाहिए क्योंकि एक डॉक उपयोगकर्ता को हर प्लेटफॉर्म पर समान ज्ञान के साथ समान समस्या को हल करने में सक्षम होना चाहिए।
डैनियल एल्डर

1
सही, डॉकर होस्ट को कंटेनर चलाने से रोकने का एक शानदार तरीका है, इसलिए होस्ट-विशिष्ट कॉन्फ़िगरेशन का उपयोग करना एक कदम पीछे की ओर है।
नवजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.