2017-03-01 6 views
12

मुझे डॉकर-कंपोज़ का उपयोग करके बहुत मज़ा आता है।डॉकर-कंपोज़ के साथ डाउनटाइम के बिना कंटेनर को पुनर्निर्माण और अद्यतन कैसे करें?

ईजी। मेरे सर्वर पर, जब मैं अपने ऐप को मामूली परिवर्तनों के साथ अपडेट करना चाहता हूं, तो मुझे केवल git pull origin master && docker-compose restart की आवश्यकता है, पूरी तरह से काम करता है।

लेकिन कभी-कभी, मुझे पुनर्निर्माण की आवश्यकता होती है (उदाहरण के लिए, मैंने एक एनपीएम निर्भरता जोड़ा है, npm install फिर से चलाने की आवश्यकता है)।

इस मामले में, मैं docker-compose build --no-cache && docker-compose restart करता हूं।

  • मेरी कंटेनर का एक नया उदाहरण
  • मौजूदा कंटेनर रोक (निर्माण के बाद नए समाप्त हो गया है)
  • बनाने वैकल्पिक रूप से हटाने शुरू नया एक
  • :

    मैं इस की उम्मीद करेंगे पुराना एक, लेकिन यह मैन्युअल रूप से किया जा सकता है

लेकिन व्यवहार में ऐसा लगता है कि यह पहले एक एजी को पुनरारंभ करना प्रतीत होता है ऐन।

क्या यह अपेक्षित व्यवहार है?

मैं पुनर्निर्माण कैसे संभाल सकता हूं और के बाद इसे नया कैसे शुरू कर सकता हूं?

शायद मुझे एक विशिष्ट आदेश याद आया? या यह समझने के लिए समझ में आता है?

docker-compose up -d --build 

यह आपके लिखें फाइल में परिभाषित सभी छवियों पुनर्निर्माण करेंगे, तो कोई भी कंटेनर जिसका छवियों को पुनः आरंभ:

+0

अन्य लोग पहले से ही सही उत्तर पर आ गए हैं। इसी तरह के प्रश्न का यह उत्तर भी मदद कर सकता है: http://stackoverflow.com/a/39501539/596285 – BMitch

उत्तर

3
मैनुअल docker-compose restart

से

आप अपने डोकर-compose.yml विन्यास में परिवर्तन इन परिवर्तन इस आदेश चलाने के बाद दिखाई नहीं देंगे करते हैं।

आप

$docker-compose up -d --no-deps --build <service_name> 

--no-deps करने के लिए जुड़ा हुआ सेवाओं शुरू नहीं होगी सक्षम होना चाहिए।

+0

हर बार जब मैं आपके उत्तर का उपयोग करता हूं, * '--no-deps' लिंक सेवाओं को शुरू नहीं करेगा * मुझे डराता है। क्या आप इसका अर्थ/अर्थों के बारे में अधिक विशिष्ट हो सकते हैं? –

+0

यह एक अच्छा सवाल है, आपको यह पूछना चाहिए ... संक्षेप में - सेवा लिंक पर्यावरण चर बनाते हैं जो कंटेनरों को एक दूसरे के साथ एक स्टैक के भीतर संवाद करने की अनुमति देते हैं, या स्टैक के बाहर अन्य सेवाओं के साथ। जब आप कोई नई सेवा बनाते हैं या किसी मौजूदा को संपादित करते हैं, या सर्विस स्टैक के लिए स्टैकफाइल में निर्दिष्ट करते हैं, तो आप स्पष्ट रूप से सेवा लिंक निर्दिष्ट कर सकते हैं। लेकिन आपको वास्तव में अपनी रचना फ़ाइल में नेटवर्क का उपयोग करना चाहिए। – denov

2

-d ध्वज के साथ पृष्ठभूमि में अपने कंटेनर को चलाने के लिए, up आदेश को --build ध्वज का उपयोग करें बदल गया।

-d मानता है कि आप अपने खोल के अग्रभूमि में सबकुछ चलाना नहीं चाहते हैं। यह restart की तरह कार्य करता है, लेकिन इसकी आवश्यकता नहीं है।

6

समस्या यह है कि restart आपके वर्तमान कंटेनर को पुनरारंभ करेगा, जो आप नहीं चाहते हैं।

एक उदाहरण के रूप में, मैं सिर्फ इस

  • परिवर्तन डोकर फ़ाइल छवियों में से एक
  • कॉल docker-compose build छवियों के निर्माण के लिए किया था
  • कॉल docker-compose down और docker-compose up
    • docker-compose restart यहां काम नहीं करेगा
    • docker-compose start उपयोग करने के बजाय भी काम नहीं करता है

ईमानदारी से कहूं तो मैं पूरी तरह से सुनिश्चित करें कि आप एक down पहले क्या करने की जरूरत नहीं कर रहा हूँ, लेकिन यह जांच करने के लिए आसान होना चाहिए। नीचे की रेखा यह है कि आपको up पर कॉल करने की आवश्यकता है। आप अपरिवर्तित छवियों के कंटेनर को पुनरारंभ करेंगे, लेकिन बदली गई छवि के लिए आपको recreating दिखाई देगा।

इस पर लाभ up --build पर कॉल करने का लाभ यह है कि आप पुनरारंभ करने से पहले इमारत-प्रक्रिया को पहले देख सकते हैं।

1: टिप्पणियों से; नीचे की आवश्यकता नहीं है, आप बस up --build पर कॉल कर सकते हैं। नीचे कुछ "डाउन" -साइड हैं, जिनमें आपके (वॉल्यूम-) डेटा के लिए विनाशकारी संभव है।

+1

'डॉकर-कंपोज़ डाउन' की आवश्यकता नहीं है, 'अप' का पता लगाया जाएगा कि निर्माण को अद्यतन किया गया है और कंटेनर को फिर से बनाया गया है। साथ ही अन्य उत्तरों ने नोट किया है कि ऑप को शायद 'डॉकर-कंपोज़ अप-डी' – Matt

+0

की आवश्यकता होगी असल में मुझे कहना चाहिए कि' डाउन '_bad_ विचार है। यह सबकुछ नष्ट कर देता है, जिसमें कुछ सेटअप में वॉल्यूम डेटा शामिल हो सकता है। – Matt

+0

आपके पास किसी कंटेनर में डेटा नहीं होना चाहिए, यदि यह डेटा कंटेनर नहीं है, लेकिन बिंदु मान्य है। – Nanne

2

सीधे अपने एप्लिकेशन वातावरण का प्रबंधन न करें। रांचर जैसे तैनाती उपकरण का प्रयोग करें। इसके साथ आप बिना किसी डाउनटाइम के अपने डॉकराइज्ड एप्लिकेशन को अपग्रेड कर सकेंगे और आपको इसे डाउनग्रेड करने की आवश्यकता होगी।

रनिंग रांचर एक और डॉकर कंटेनर चलाने जितना आसान है क्योंकि यह टूल डॉकर हब पर उपलब्ध है।

संबंधित मुद्दे

 संबंधित मुद्दे