सवाल मैं सिस्टम बूट पर डॉकर कंटेनर को स्वतः कैसे शुरू करूं?


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

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

मैंने उपयोग किया है supervisord अतीत में ऑटो ऐप शुरू करने के लिए। लेकिन यह डॉकर के लिए सही चीज़ की तरह महसूस नहीं करता है।


99
2017-10-02 14:25


मूल




जवाब:


जाहिर है, डॉकर कंटेनर को स्वतः शुरू करने के लिए वर्तमान विधि (डॉकर 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 गुना से अधिक की स्थिति डॉकर फिर से शुरू करने की कोशिश कर रही है   बर्तन। अधिकतम पुनरारंभ सीमा प्रदान करना केवल इसके लिए मान्य है   विफलता नीति।


120
2017-12-07 20:18



"हमेशा - बाहर निकलने की स्थिति के बावजूद कंटेनर को हमेशा पुनरारंभ करें" थोड़ा उलझन में है। यदि आप मैन्युअल रूप से कंटेनर से बाहर निकलें / रोकें, तो यह कंटेनर को पुनरारंभ नहीं करेगा, जो व्यवहार मैं ढूंढ रहा था। - w00t
बहुत बढ़िया! धन्यवाद, इसे अभी आज़माएं। - zx1986
नोट: एक और नीति कहा जाता है unless-stopped जोड़ा गया। यह काम करता है always लेकिन अगर कंटेनर रुक गया है और सिस्टम रीबूट किया गया है या डॉकर डिमन पुनरारंभ होता है, तो कंटेनर पुनरारंभ नहीं होगा। सभी 4 विकल्पों के अच्छे लिखने के लिए यहां देखें blog.codeship.com/... - David Morales
बेशक, द docker डेमॉन को इसका समर्थन करने के लिए ऑटो-स्टार्ट होना चाहिए। - sherrellbc


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

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


7
2017-10-14 04:49





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

क्यों नहीं?

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

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


4
2017-10-02 14:27



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