डॉकर अपनी क्षमता के कारण कंटेनर्स का उपयोग करके एप्लिकेशन को आसानी से बनाने, डेप्लॉय करने और चलाने के लिए अधिक से अधिक लोकप्रिय हो रहा है। कंटेनर्स डेवलपर्स को एक एप्लिकेशन को उसकी सभी लाइब्रेरीज और निर्भरताओं के साथ पैकेज करने की अनुमति देते हैं, ताकि इसे एक पूर्ण पैकेज के रूप में डेप्लॉय किया जा सके। लिनक्स पर डॉकर इंस्टॉल करना अपेक्षाकृत आसान है। आपको बस टर्मिनल में कुछ कमांड चलाने की जरूरत है, और आप जाने के लिए तैयार हैं।
हालांकि, सभी उपयोगकर्ताओं के लिए यह समान नहीं हो सकता, यहां तक कि सफल इंस्टॉलेशन के बाद भी। सबसे आम उभरती त्रुटि है: डॉकर डेमन से (unix:///var/run/docker.sock) पर कनेक्ट नहीं हो सकता। क्या डॉकर डेमन चल रहा है? यह त्रुटि विभिन्न डॉकर कमांड चलाते समय उत्पन्न हो सकती है जैसे docker run, docker info, docker pull, docker stop, आदि।
त्रुटि का कारण: डॉकर डेमन से कनेक्ट नहीं हो सकता
कई डेवलपर्स की शिकायतें प्राप्त करने के बाद, हमने इसमें गोता लगाने और प्रभावी समाधान खोजने का फैसला किया। इस त्रुटि को ट्रिगर करने के कुछ कारणों में शामिल हैं:
- डॉकर डेमन नहीं चल रहा है।
- डॉकर क्लीनली शटडाउन नहीं हुआ।
- डॉकर सर्विस शुरू करने के लिए रूट प्रिविलेज की कमी।
अब जब आपको समस्या के कारण की बुनियादी समझ हो गई है, तो आइए आपके लिए उपलब्ध विभिन्न समाधानों पर नजर डालते हैं।
समाधान 1: systemctl के साथ डॉकर सर्विस शुरू करें
अगर आपने अभी-अभी उबंटू पर डॉकर की फ्रेश इंस्टॉलेशन पूरी की है या अपना PC रीबूट किया है, तो इस बात की बहुत अधिक संभावना है कि डॉकर सर्विस नहीं चल रही हो। डॉकर डेमन (dockerd) डॉकर के लिए सिस्टम सर्विस है। यह सर्विस इमेज, कंटेनर, नेटवर्क और वॉल्यूम जैसे विभिन्न डॉकर ऑब्जेक्ट्स को संभालती है और डॉकर API अनुरोधों को सुनती है।
Systemctl कमांड पुराने SysV इनिट सिस्टम को रिप्लेस करता है, और यह लिनक्स सिस्टम पर चल रही systemd सर्विसेज को मैनेज करता है। अगर आपके सिस्टम में systemctl नहीं है, तो चिंता न करें; नीचे वर्णित service कमांड का उपयोग करें।
नोट: यह विधि केवल उन उपयोगकर्ताओं के लिए काम करती है जिन्होंने APT पैकेज मैनेजर के साथ डॉकर इंस्टॉल किया है। यदि आपने SNAP के माध्यम से डॉकर इंस्टॉल किया है, तो नीचे समाधान 5 देखें।
- टर्मिनल खोलें और पहला कमांड 실행 करें - unmask docker।
sudo systemctl unmask docker
अगर हम डॉकर सर्विस शुरू करने की कोशिश करते हैं जब डॉकर मास्क्ड है, तो हमें त्रुटि 'Failed to start docker.service: Unit is masked.' का सामना करना पड़ सकता है। मास्क को डिसेबल करने का एक अधिक मजबूत संस्करण माना जा सकता है। जब एक यूनिट फाइल मास्क्ड होती है, तो यूनिट को 'dev/null' से जोड़ा जाता है। आप कमांड के साथ सभी यूनिट फाइलों की स्थिति सूचीबद्ध कर सकते हैं - '$ systemctl list-unit-files'
- एक बार डॉकर यूनिट अनमास्क्ड हो जाने पर, हम systemctl कमांड के साथ डॉकर डेमन शुरू कर सकते हैं। डॉकर डेमन इमेज, कंटेनर और डॉकर API अनुरोधों जैसे डॉकर ऑब्जेक्ट्स को मैनेज करता है। कमांड लाइन पर नीचे दिया गया कमांड 실행 करें।
systemctl start docker
- सत्यापित करने के लिए कि डॉकर सर्विस सक्रिय और चल रही है। हम systemctl status कमांड का उपयोग करेंगे, जो विशेष सर्विस की वर्तमान स्थिति दिखाता है। अपने टर्मिनल पर नीचे दिया गया कमांड 실행 करें।
systemctl status docker
उपरोक्त छवि से, हम देख सकते हैं कि डॉकर सक्रिय और चल रहा है।
समाधान 2: 'फेल्ड डॉकर पुल' को क्लीन करें और डॉकर सर्विस शुरू करें
ऐसे मामले होते हैं जहां आप कंटेनर खींचते समय अप्रत्याशित रूप से डॉकर बंद कर सकते हैं। ऐसी स्थितियां docker.service और docker.socket फाइलों को मास्क कर देंगी। Docker.socket '/var/run/docker.sock' पर स्थित एक फाइल है और डॉकर डेमन के साथ संवाद करने के लिए उपयोग की जाती है। हमें दोनों यूनिट फाइलों को अनमास्क करना होगा - docker.service और docker.daemon आगे बढ़ने से पहले डॉकर शुरू करने के लिए।
- टर्मिनल लॉन्च करें और नीचे दिए गए कमांड 실행 करें:
systemctl unmask docker.service systemctl unmask docker.socket systemctl start docker.service
यदि नीचे दिए गए कमांड 실행 करने के बाद भी आप त्रुटि का अनुभव कर रहे हैं, तो हमें Containerd डायरेक्टरी में फाइलों को डिलीट करना होगा और फिर से डॉकर शुरू करना होगा। Containerd डॉकर 1.11 में पेश की गई एक सुविधा थी और इसका उपयोग डॉकर इमेज लाइफ-साइकिल को मैनेज करने के लिए किया जाता है।
- टर्मिनल खोलें और नीचे दिए गए कमांड 실행 करें। सुनिश्चित करें कि आप रूट पासवर्ड जानते हैं क्योंकि हमें कमांड 실행 करने के लिए उन्नत विशेषाधिकारों की आवश्यकता होगी।
sudo su service docker stop cd /var/run/docker/libcontainerd rm -rf containerd/* rm -f docker-containerd.pid service docker start
समाधान 3: Dockerd (डॉकर डेमन) सर्विस शुरू करें
Dockerd डॉकर डेमन है जो डॉकर API को सुनता है और विभिन्न डॉकर ऑब्जेक्ट्स को मैनेज करता है। Dockerd को कमांड '$ systemctl start docker' के विकल्प के रूप में उपयोग किया जा सकता है जिसका उपयोग डॉकर डेमन शुरू करने के लिए भी किया जाता है।
- टर्मिनल खोलें और नीचे दिए गए कमांड को 실행 करके dockerd शुरू करें:
sudo dockerd
समाधान 4: Service कमांड के साथ डॉकर शुरू करें
यदि आप SysV इनिट सिस्टम का उपयोग कर रहे हैं, तो systemctl कमांड आपके लिए काम नहीं करेगा। हमें service कमांड का उपयोग करके डॉकर डेमन शुरू करना होगा।
- टर्मिनल लॉन्च करें और नीचे दिए गए कमांड 실행 करें:
sudo service --status-all sudo service docker start
समाधान 5: Snap के साथ डॉकर सर्विस शुरू करें
यदि आपने Snap पैकेज मैनेजर के साथ डॉकर इंस्टॉल किया है, तो आपको डॉकर डेमन को मैनेज करने के लिए snap कमांड का उपयोग करना होगा।
आमतौर पर, Snap अपनी सर्विसेज को स्वचालित रूप से मैनेज करता है। हालांकि, इस त्रुटि जैसी स्थितियों में, मैन्युअल हस्तक्षेप की आवश्यकता होगी। स्नैप कमांड के साथ उपयोग किए जा सकने वाले कुछ आर्गुमेंट्स में stop, start, और restart शामिल हैं। हमारे मामले में, हम start पैरामीटर का उपयोग करेंगे।
- टर्मिनल खोलें और डॉकर शुरू करने के लिए नीचे दिया गया कमांड 실행 करें।
sudo snap start docker
- नीचे दिए गए कमांड को 실행 करके सत्यापित करें कि डॉकर सर्विस शुरू हुई थी।
sudo snap services
यह सभी चल रही स्नैप सर्विसेज को सूचीबद्ध करेगा।
यदि उपरोक्त कमांड आपके लिए काम नहीं करते हैं, तो docker:home प्लग को कनेक्ट करने का प्रयास करें क्योंकि यह डिफ़ॉल्ट रूप से ऑटो-कनेक्टेड नहीं है। एक बार हो जाने पर, डॉकर सर्विस शुरू करें।
- टर्मिनल लॉन्च करें और नीचे दिए गए कमांड चलाएं:
sudo snap connect docker:home :home sudo snap start docker
समाधान 6: रूट प्रिविलेज के बिना उपयोगकर्ताओं के लिए डॉकर शुरू करें
त्रुटि उन्नत विशेषाधिकारों की कमी के कारण भी उत्पन्न हो सकती है और उपयोगकर्ता के पास 'unix:///var/run/docker.sock' तक पहुंच नहीं है। सौभाग्य से एक समाधान है। हम डॉकर होस्ट वेरिएबल को पोर्ट 2375 के माध्यम से लोकलहोस्ट पर एक्सपोर्ट करेंगे।
- टर्मिनल खोलें और नीचे दिया गया कमांड चलाएं:
export DOCKER_HOST=tcp://localhost:2375
समाधान 7: डॉकर को पुनः इंस्टॉल करें
यदि उपरोक्त समाधान त्रुटि को हल नहीं करते हैं, तो इस बात की बहुत अधिक संभावना है कि आपके इंस्टॉलेशन में त्रुटियां हों। अपने लिनक्स सिस्टम में डॉकर को सही ढंग से इंस्टॉल करने के लिए, डॉकर की आधिकारिक वेबसाइट से चरणों का पालन करें।