क्या आपने कभी Docker चलाने की कोशिश की और अचानक "Cannot connect to the Docker daemon" त्रुटि का सामना किया? यह सबसे निराशाजनक मुद्दों में से एक है जो आपको शुरू करने से पहले ही रोक सकता है। Docker daemon पृष्ठभूमि में चुपचाप चलता है, जो कंटेनर शुरू करने और रोकने से लेकर इमेज प्रबंधित करने, लेयर बनाने, और आपके सभी Docker कमांड जैसे docker run, docker ps, आदि को प्रोसेस करने तक सब कुछ संभालता है। यदि आपका टर्मिनल इससे नहीं जुड़ सकता, तो कुछ भी काम नहीं करता।
इस गाइड में, मैं समझाऊंगा कि यह त्रुटि क्यों होती है और Docker को फिर से सुचारू रूप से चलाने के लिए सरल, व्यावहारिक सुधार दिखाऊंगा।
यह समझना कि Docker Daemon क्या करता है
Docker daemon (dockerd) एक बैकग्राउंड सेवा है जो कंटेनर, इमेज, नेटवर्किंग और स्टोरेज के प्रबंधन के लिए जिम्मेदार है। जब आप Docker कमांड चलाते हैं, तो CLI ये कार्य स्वयं नहीं करता; इसके बजाय, यह daemon को अनुरोध भेजता है। लिनक्स सिस्टम पर, यह संचार "/var/run/docker.sock" पर स्थित एक यूनिक्स सॉकेट के माध्यम से होता है। Docker Desktop या WSL वातावरण पर, CLI एक नामित पाइप या वर्चुअल मशीन द्वारा प्रबंधित सॉकेट के माध्यम से daemon के साथ संचार करता है।
यदि CLI daemon के साथ संचार नहीं कर सकता, तो आपको "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?" जैसी त्रुटियां मिलती हैं।
यह अक्सर इन कारणों में से एक के कारण होता है:
- Docker सेवा चल नहीं रही है।
- आपके उपयोगकर्ता के पास Docker सॉकेट तक पहुंचने की अनुमति नहीं है।
- Docker गलत संदर्भ का उपयोग कर रहा है।
- Docker सॉकेट गायब है या इसमें गलत अनुमतियां हैं।
DOCKER_HOSTजैसे एनवायरनमेंट वेरिएबल गलत कॉन्फ़िगर हैं।- प्लेटफ़ॉर्म-विशिष्ट समस्याएं (Docker Desktop, WSL, या रिमोट daemon)।
इस संचार श्रृंखला का कौन सा हिस्सा टूटा है, इसकी पहचान करना समस्या को सही ढंग से ठीक करने की कुंजी है।
अपने उपयोगकर्ता अनुमतियों की जांच करें
लिनक्स सिस्टम पर, Docker एक यूनिक्स सॉकेट के माध्यम से संचार करता है जो रूट उपयोगकर्ता के स्वामित्व में है। उपयोगकर्ताओं को sudo के बिना इसे एक्सेस करने के लिए docker ग्रुप से संबंधित होना चाहिए।
सॉकेट अनुमतियों को सत्यापित करने के लिए, निम्न कमांड चलाएं:
ls -l /var/run/docker.sock
यह आउटपुट हमें बताता है कि सॉकेट रूट के स्वामित्व में है, और केवल वे उपयोगकर्ता जो docker ग्रुप से संबंधित हैं, इसे पढ़ने या लिखने की अनुमति है। यदि आपका उपयोगकर्ता खाता इस ग्रुप का हिस्सा नहीं है, तो Docker पहुंच से इनकार कर देगा और कमांड निष्पादित करने में विफल रहेगा। इस समस्या को ठीक करने के लिए, आपको अपने उपयोगकर्ता को Docker ग्रुप में जोड़ना होगा:
sudo usermod -aG docker $USER
यदि Docker ग्रुप मौजूद नहीं है, तो आप इसे निम्न कमांड का उपयोग करके बना सकते हैं:
sudo groupadd docker
सत्यापित करें कि Docker सेवा चल रही है
एक और बहुत सरल लेकिन महत्वपूर्ण मुद्दा यह है कि Docker बिल्कुल नहीं चल रहा हो सकता है। यदि Docker daemon बंद है, तो Docker CLI के पास कनेक्ट करने के लिए कुछ भी नहीं है, जिसके परिणामस्वरूप उक्त त्रुटि होती है। Docker सेवा की वर्तमान स्थिति की जांच करने के लिए, निम्न कमांड चलाएं:
systemctl status docker
हमारे मामले में, Docker सक्रिय है और सफलतापूर्वक चल रहा है। हालांकि, यदि आउटपुट inactive (dead) या failed जैसी स्थिति दिखाता है, तो इसका मतलब है कि Docker सेवा नहीं चल रही है।
Docker को मैन्युअल रूप से शुरू करने के लिए, आप यह कमांड चला सकते हैं:
sudo systemctl start docker
यदि आप चाहते हैं कि Docker सिस्टम बूट होने पर स्वचालित रूप से शुरू हो, तो इसे निम्न कमांड का उपयोग करके सक्षम करें:
sudo systemctl enable docker
Docker Daemon को मैन्युअली शुरू करें (dockerd)
न्यूनतम सर्वर या कस्टम लिनक्स सेटअप पर, Docker को systemd द्वारा प्रबंधित नहीं किया जा सकता है। इन वातावरणों में, Docker daemon स्वचालित रूप से शुरू नहीं हो सकता है, भले ही Docker इंस्टॉल हो। यह जांचने के लिए कि daemon शुरू हो सकता है या नहीं, इसे मैन्युअल रूप से चलाने का प्रयास करें:
sudo dockerd
आउटपुट को ध्यान से देखें। यदि कुछ गलत होता है, तो Docker आमतौर पर एक स्पष्ट त्रुटि संदेश प्रिंट करता है जो समस्या बताता है, जैसे स्टोरेज ड्राइवर समस्या, अनुमति त्रुटि, या नेटवर्क संघर्ष।
Docker यूनिक्स सॉकेट का निरीक्षण और सुधार करें
Docker CLI एक यूनिक्स सॉकेट का उपयोग करके Docker daemon के साथ इंटरैक्ट करता है। यदि यह सॉकेट गायब है, भ्रष्ट है, या इसमें गलत अनुमतियां हैं, तो Docker कनेक्ट नहीं कर सकता। आप निम्न कमांड का उपयोग करके जांच सकते हैं कि सॉकेट मौजूद है या नहीं:
ls /var/run/docker.sock
यदि फ़ाइल गायब है, तो इसका आमतौर पर मतलब है कि Docker daemon नहीं चल रहा है, या Docker स्टार्टअप के दौरान सॉकेट बनाने में विफल रहा। उस स्थिति में, आपको सॉकेट को फिर से बनाने के लिए Docker को रीस्टार्ट करना होगा:
sudo systemctl restart docker
यदि सॉकेट मौजूद है लेकिन इसमें गलत अनुमतियां हैं, तो निम्न कमांड का उपयोग करके उन्हें ठीक करें:
sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock
Docker संदर्भ और एनवायरनमेंट वेरिएबल सत्यापित करें
कभी-कभी Docker daemon से कनेक्ट नहीं कर पाता क्योंकि यह गलत एंडपॉइंट पर इशारा कर रहा होता है। यह तब हो सकता है जब आपका DOCKER_HOST एनवायरनमेंट वेरिएबल गलत तरीके से सेट हो या आपका सक्रिय Docker संदर्भ किसी रिमोट या अनुपलब्ध वातावरण की ओर इशारा करता हो।
एनवायरनमेंट वेरिएबल जांचें
यह देखने के लिए निम्न कमांड चलाएं कि क्या कोई Docker-संबंधी एनवायरनमेंट वेरिएबल सेट हैं:
env | grep DOCKER
यदि आपको DOCKER_HOST=tcp://localhost:2375 जैसा कुछ दिखाई देता है, तो इसका मतलब है कि Docker एक रिमोट daemon की ओर इशारा कर रहा है जो निष्क्रिय या गायब हो सकता है। आप चर को अनसेट करके इसे अस्थायी रूप से ठीक कर सकते हैं:
unset DOCKER_HOST
इसे स्थायी रूप से हटाने के लिए, इसे "~/.bashrc", "~/.zshrc", और "/etc/environment" जैसे शेल कॉन्फिगरेशन फ़ाइलों से साफ़ करें।
सक्रिय Docker संदर्भ जांचें
Docker संदर्भ निर्धारित करते हैं कि CLI किस daemon के साथ संचार करता है। आप उपलब्ध संदर्भों को सूचीबद्ध कर सकते हैं और सक्रिय वाला देख सकते हैं:
docker context ls
एक एस्टेरिस्क (*) वर्तमान में सक्रिय संदर्भ को इंगित करता है। यदि संदर्भ किसी अनुपलब्ध वातावरण की ओर इशारा करता है, तो डिफ़ॉल्ट स्थानीय daemon पर वापस स्विच करें:
docker context use default
प्लेटफ़ॉर्म-विशिष्ट समस्याएं
कुछ कनेक्शन समस्याएं केवल विशिष्ट प्लेटफ़ॉर्म पर होती हैं। उदाहरण के लिए, विंडोज या macOS पर Docker Desktop daemon को एक हल्के VM के अंदर चलाता है। यदि VM शुरू करने में विफल रहता है, तो Docker CLI कनेक्ट नहीं कर सकता। इस समस्या को ठीक करने के लिए, अपने Docker Desktop को रीस्टार्ट करें।
इसी तरह, WSL के साथ Docker का उपयोग करते समय, daemon एक लिनक्स वातावरण में चलता है। सुनिश्चित करें कि WSL ठीक से इंस्टॉल और चल रहा है:
wsl --list --running
यदि WSL से Docker daemon पहुंच योग्य नहीं है, तो Docker Desktop सेवा या विशिष्ट WSL डिस्ट्रीब्यूशन को रीस्टार्ट करने से अक्सर समस्या ठीक हो जाती है।
भविष्य में इस त्रुटि से बचने के लिए टिप्स
भविष्य में "cannot connect to Docker daemon" त्रुटियों से बचने के लिए, हमेशा सुनिश्चित करें कि Docker सेवा चल रही है, खासकर सिस्टम अपडेट के बाद, और sudo का उपयोग छोड़ने के लिए अपने उपयोगकर्ता को Docker ग्रुप में जोड़ें। मशीनों, WSL डिस्ट्रीब्यूशन, या Docker Desktop का उपयोग करने के बाद विशेष रूप से अपने सक्रिय Docker संदर्भ की नियमित रूप से जांच करें, और DOCKER_HOST सेट करने से बचें जब तक कि किसी विशिष्ट रिमोट daemon से कनेक्ट न कर रहे हों, क्योंकि गलत कॉन्फ़िगर किए गए वेरिएबल CLI कमांड को गुमराह कर सकते हैं। इसके अलावा, journalctl -u docker.service का उपयोग करके daemon लॉग्स की निगरानी करें ताकि समस्याओं को जल्दी पकड़ा जा सके।