2016-08-13 5 views
17

पर्यावरणडोकर झुंड सेवा - नवीनतम छवि के बल अद्यतन पहले से चल रहा

  • डोकर 1.12
  • उबंटू 16,04

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

उदाहरण:

docker service create --replicas 1 --name servicename --publish 80:80 username/imagename:latest 

मेरे निर्माण प्रक्रिया डोकर केंद्र पर नवीनतम छवि को अपडेट किया गया अब मैं नवीनतम फिर से खींचने के लिए चाहते हैं: मैं सेवा को तैनात किया।

मैं कोशिश की है चल रहा है:

docker service update --image username/imagename:latest servicename 

जब मैं इस प्रक्रिया का पालन करें, डोकर नवीनतम खींच नहीं करता है, मैं इसे मान लिया गया है के बाद से मैं नवीनतम चाहता था और डोकर पहले से ही एक छवि खींच लिया है कि लगता है: नवीनतम फिर वहाँ कुछ भी नहीं है करने के लिए।

मेरे आसपास एकमात्र काम सेवा servicename और पुन: नियोजन को हटाने के लिए है।

+0

यह काम नहीं करता है। मैंने डॉकर को कोई समस्या बनाई है: https://github.com/docker/docker/issues/26978 वर्कअराउंड अर्थहीन मेटाडेटा या तैनाती की जानकारी आदि को जोड़ना है जैसे पहले टिप्पणी की गई:> मैं कंटेनर का उपयोग करके रोलिंग अपडेट ट्रिगर करने में सक्षम था लेबल। मैंने जोड़ा - कंटेनर-लेबल-एड तैनाती = "1.0.1"। इसलिए हर बार जब मैं लेबल बदलता हूं, तो प्रत्येक सेवा सेवा की एक पुल और पुनर्वितरण करती है। - लंबे समय से 14 अगस्त को 15:53 ​​ –

उत्तर

11

बस भविष्य में संदर्भ के लिए:

डोकर 1.13 जोड़ा एक --force झंडा service update रहे हैं:

--force: सेना अद्यतन भले ही कोई बदलाव की आवश्यकता होती है

इसे इस प्रकार उपयोग करें:

docker service update --force service_name 
+2

मैं Azure पर डॉकर स्वार (17.04.0-ce) का उपयोग करता हूं और केवल '--force' का उपयोग करके नवीनतम संस्करण में छवि अपडेट नहीं करता है। मुझे छवि टैग में पाचन जोड़ना है: 'डॉकर सेवा अपडेट --image रजिस्ट्री.को /image:[email protected]:109ca ... सेवा'। फिर यह नवीनतम धक्का के लिए छवि अद्यतन करता है। क्या मैं कभी याद कर रहा हूँ? – manixx

+1

आईआईआरसी, यदि आपकी सेवा एक विशिष्ट डाइजेस्ट का उपयोग करने के लिए सेट है, तो इसे अपडेट करने से वह वही छवि खींच लेगा। आप डाइजेस्ट पिनिंग को हटाने के लिए 'डॉकर सर्विस अपडेट --force --image रजिस्ट्री.कोइमेज सर्विस' का प्रयास कर सकते हैं, और उसके बाद से एक ही '--force' को चाल चलनी चाहिए। – Aisamu

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! मैंने कुछ भारी परीक्षण किया और मुझे '--force' ध्वज के साथ कोई भाग्य नहीं मिला। मैंने एक निजी डॉकर रजिस्ट्री ('रजिस्ट्री: 2' का उपयोग करके) और डे आधिकारिक डॉकर हब का प्रयास किया (माना जाता है कि रजिस्ट्री कारण हो सकती है)। मैंने अपडेट के दौरान कभी भी डाइजेस्ट ('सेवा बनाने' या 'सेवा अपडेट' पर) निर्दिष्ट नहीं किया है, लेकिन डॉकर हमेशा पाचन का उपयोग करता है। 'सेवा निरीक्षण' ने पाचन भी दिखाया और स्वचालित रोलबैक भी इसे माना जाता है। शायद यह एक अपेक्षित व्यवहार है ('17.05.0-ce पर परीक्षण, 89658be' का निर्माण)? – manixx

6

डॉकर स्वचालित रूप से किसी छवि के लिए डॉकरहब (या निजी रजिस्ट्री) से खींच नहीं करेगा: टैग जो आपके पास पहले से ही स्थानीय है।

यदि आपने docker service update से पहले मैन्युअल पुल किया है, या स्थानीय रूप से छवि को हटा दिया है, तो यह होगा।

docker pull image:tag && docker service update --image username/imagename:latest servicename

आप संख्यानुसार आपकी छवियों टैगिंग और एक अद्यतन टैग का उपयोग करके इस स्थिति से बचने कर सकते हैं:

तुम भी आदेश श्रृंखला सकता है। username/imagename:1.1.0

+0

मैंने बिना किसी सफलता के प्रबंधक पर एक पुल और सर्विस अपडेट करने की कोशिश की। फिर किसी भी सफलता के बिना प्रबंधक से प्रत्येक नोड पर एक पुल करने और एक सेवा अद्यतन करने की कोशिश की। – longday

+3

मैं कंटेनर लेबल का उपयोग करके रोलिंग अपडेट ट्रिगर करने में सक्षम था। मैंने जोड़ा - कंटेनर-लेबल-एड तैनाती = "1.0.1"। इसलिए हर बार जब मैं लेबल बदलता हूं, तो प्रत्येक सेवा सेवा की एक पुल और पुनर्वितरण करती है। – longday

2

मैं ऐसा क्या

  1. छवि पहले खींच
  2. भागो नया टाइमस्टैम्प लेबल के साथ अद्यतन आदेश

डोकर सेवा अद्यतन last_deployed --container-लेबल से जोड़ने है = $ (दिनांक -0 +% वाई-% एम-% डीटी% एच:% एम:% एस) कंटेनर_नाम

3

आप इस तरह की छवि के बजाय आईडी username/imagename:latest इस्तेमाल कर सकते हैं:

docker service update --image \ 
$(docker inspect --type image --format '{{.Id}}' username/imagename:latest) \ 
servicename 

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

अद्यतन: या आप छवि इस्तेमाल कर सकते हैं इस प्रकार पचाने:

docker service update --image \ 
$(docker inspect --type image --format '{{index .RepoDigests 0}}' username/imagename:latest) \ 
servicename 

docker inspect --type image --format '{{index .RepoDigests 0}}' IMAGE रिटर्न छवि को पचाने जो रजिस्ट्री v2 द्वारा उत्पन्न छवि के अद्वितीय हैश भी शामिल है। इस प्रकार, छवि रजिस्ट्री से खींचा जाना चाहिए, अन्यथा पचाना उपलब्ध नहीं होगा।

पाचन का उपयोग करने से आप अपने सभी नोड्स पर छवियों को खींच नहीं सकते हैं (निर्दिष्ट डाइजेस्ट वाली छवियां स्वचालित रूप से आवश्यक नोड्स पर रजिस्ट्री से खींची जाएंगी)। लेकिन आपको सेवा अद्यतन से पहले प्रबंधक नोड पर एक बार छवि के ताजा संस्करण को खींचना होगा।

Btw, पिछले रास्ता डिफ़ॉल्ट होगा since Docker 1.13

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