हाल ही में, मैंने डॉकटर के उपयोग पर कुछ दिलचस्प ट्यूटोरियल लिखे हैं, एक साफ-सुथरी तकनीक जो LXC को आनंद के प्यारे बंडल में लपेटती है, और मैं कैसे रखूं, कम ऑटिस्टिक रूप से इच्छुक डेवलपर्स, इंजीनियर और सिस्टम एडमिनिस्ट्रेटर, जो इतने उत्सुक नहीं हैं पायथन उल्टी पर, ओएस-स्तरीय वर्चुअलाइजेशन के चमत्कारों का आनंद लें। लेकिन समस्याएँ हैं। पी>
आज हम जिन दो मुद्दों पर चर्चा करेंगे, वे तब होते हैं जब आप एक नामित कंटेनर शुरू करते हैं, या एक को हटाने का प्रयास करते हैं। अर्थात्, स्क्रीन पर फैंसी अक्षर कुछ इस तरह पढ़ेंगे:"संघर्ष। नाम W पहले से ही कंटेनर XYZ द्वारा उपयोग में है। आपको हटाना होगा ..." और मुसीबत का दूसरा भाग पढ़ता है:"संघर्ष, डिफ़ॉल्ट को दूर नहीं कर सकता कंटेनर का नाम ..." विराम चिह्नों के घोर दुरुपयोग के अलावा, अब हमें यह पता लगाने की आवश्यकता है कि इसे कैसे सुलझाया जाए। पी>
समस्याएं
ठीक है, इसलिए हमारे पास यह मुद्दा है:
डॉकर रन-डी-टी-पी 22-पी 80 --नाम <नाम> <रेपो:टैग>
FATA [0000] डेमन से त्रुटि प्रतिक्रिया:संघर्ष। "XYZ" नाम पहले से ही कंटेनर हेक्साकोड द्वारा उपयोग में है। उस नाम का पुन:उपयोग करने में सक्षम होने के लिए आपको उस कंटेनर को हटाना होगा (या उसका नाम बदलना होगा)। पी>
हम कंटेनर प्रारंभ नहीं कर सकते, क्योंकि नाम पहले से ही उपयोग में है। डॉकर पीएस कमांड चलाएं, आप इसे वहां नहीं देख पाएंगे। इसके अलावा यदि आप अपमानजनक कंटेनर बचे हुए को मारने या हटाने का प्रयास करते हैं, तो आपको यह मिलता है:
डॉकर आरएम --लिंक <नाम>
डेमन से त्रुटि प्रतिक्रिया:संघर्ष, कंटेनर का डिफ़ॉल्ट नाम नहीं हटा सकता
FATA [0000] त्रुटि:एक या अधिक कंटेनरों को हटाने में विफल
एक मृत अंत की तरह लगता है। तो अब क्या? पी>
समाधान
सबसे पहले, आइए जानें कि हमारे पास क्या है। जाहिर है, अतीत में किसी बिंदु पर, आपने एक नामित कंटेनर बनाया है, और फिर, आपने इसे चलाना छोड़ दिया है। उसके बाद, आपके मेजबान को किसी भी कारण से रीबूट किया गया था, और आपने अपने कंटेनरों को शानदार ढंग से समाप्त नहीं किया है। बची हुई फाइलें अब आपको पुराने नाम के साथ नए कंटेनरों को फिर से शुरू करने से रोकती हैं, क्योंकि सिस्टम को लगता है कि पुराने अभी भी मौजूद हैं। पी>
हम समस्या को दो तरीकों से ठीक कर सकते हैं। हम सबसे पहले कृपालु से शुरुआत करेंगे। यदि आप docker ps कमांड चलाते हैं, तो आप अपने पुराने कंटेनर नहीं देख पाएंगे, क्योंकि वे वास्तव में नहीं चल रहे हैं। लेकिन अगर आप -a झंडे के साथ docker os कमांड चलाते हैं, तो आपको अपने सभी कंटेनर चलाने का इतिहास देखना चाहिए:
पी>
असामान्य रूप से बाहर निकलने वाले कंटेनरों में गैर-शून्य स्थिति कोड होगा। उनके नाम के आधार पर उन्हें खोजें जिनकी आपको आवश्यकता है, और उन्हें वास्तविक हेक्साडेसिमल कोड का उपयोग करके हटा दें, उदाहरण:
डॉकर आरएम 85c2981e63f6 26ea04f41ab3
दूसरी विधि मैन्युअल रूप से बची हुई फ़ाइलों को अंडर / var से हटाना है। विशेष रूप से, फ़ाइलें /var/lib/docker/containers/ के अंतर्गत पाई जा सकती हैं। प्रत्येक कंटेनर निर्देशिका में एक बहुत लंबा हैश पहचानकर्ता होगा, और इसके अंदर, बदसूरत JSON आउटपुट के टन होंगे। यदि आप किसी विशेष स्ट्रिंग की खोज करते हैं जो आपके वांछित कंटेनर नाम से मेल खाता है, तो आपको प्रासंगिक निर्देशिका मिल जाएगी जो इसकी कॉन्फ़िगरेशन फ़ाइलों को रखती है। पी>
पी>
पी>
नाम खोज से मेल खाने वाली मूल निर्देशिका को हटाएं, फिर डॉकर सेवा को पुनरारंभ करें। उसके बाद, आपको अपने नाम का फिर से उपयोग करने में सक्षम होना चाहिए। यह वैसा ही है जैसा हमने KVM और libvirt बचे हुए के साथ देखा है। पी>
systemctl डॉकर को पुनरारंभ करें
और आपको उठकर दौड़ना चाहिए, बूढ़ा लड़का! पी>
निष्कर्ष
कुछ समस्याएं वास्तव में कष्टप्रद हो सकती हैं, खासकर जब वे इस बात से संबंधित हों कि सेवाएं कितनी अच्छी तरह और मजबूती से क्रैश, रिबूट और इस तरह से संभालती हैं। मुझे नापसंद है जब बची हुई फाइलें इतना दुख देती हैं। ऐसा नहीं होना चाहिए, और सेवाओं को शानदार ढंग से ठीक होना चाहिए। लेकिन हे, कंटेनर अभी भी एक युवा तकनीक है, इसलिए इस तरह की चीजें अपेक्षित हैं। पी>
उम्मीद है, एक शानदार एयरकॉन सिस्टम की तरह एक विंडशील्ड पर अपना रोष उड़ाते हुए, हमने नामित कंटेनरों के निर्माण और अनपेक्षित रिबूट और व्हाट्सएप के बाद बचे हुए को हटाने के आसपास कोहरे और भ्रम को दूर कर दिया है। अब, आपका डॉकटर अनुभव थोड़ा और सुखद होगा, और आपने कुछ या दो सीखा है कि पृष्ठभूमि में चीजें कैसे काम करती हैं। ये लो, मजे करो। पी>
प्रोत्साहित करना। पी>