Skip to content
VDS · Docker और कंटेनर

Docker: आम समस्याओं का ट्रबलशूटिंग

कंटेनर बार-बार रीस्टार्ट हो रहा है, पोर्ट इस्तेमाल में है, स्पेस खत्म, “permission denied”, सर्विस अपने पड़ोसी को नहीं देख पा रही — लक्षणों की टेबल और ट्रबलशूटिंग प्रक्रिया।

23 अगस्त 2026 को अपडेट किया गया

लगभग सभी कंटेनर समस्याएँ एक दर्जन आम समस्याओं तक ही सीमित होती हैं। निदान हमेशा उन्हीं तीन कमांड से शुरू होता है।

पहले तीन कमांड

docker compose ps
docker compose logs --tail 100 <service>
docker inspect -f '{{.State.Status}} {{.State.ExitCode}} {{.State.OOMKilled}} {{.State.Error}}' <container>

स्टेटस, लॉग की आख़िरी लाइनें और एग्ज़िट कोड ज़्यादातर सवालों का जवाब दे देते हैं। उसके बाद लक्षण के हिसाब से काम करें।

लक्षण तालिका

लक्षणसंभावित कारणक्या करें
लगातार Restartingऐप्लिकेशन स्टार्टअप पर क्रैश हो रहा हैdocker compose logs --tail 200, पहली एरर पढ़ें, आख़िरी नहीं
एग्ज़िट कोड 137, OOMKilled: trueमेमोरी ख़त्मलिमिट बढ़ाएँ या लीक ढूँढें, देखें resource limits
स्टार्टअप के तुरंत बाद एग्ज़िट कोड 1कॉन्फ़िगरेशन या वेरिएबल में गड़बड़ीdocker compose config — सब्स्टिट्यूशन जाँचें
port is already allocatedपोर्ट किसी और प्रोसेस ने ले रखा हैsudo ss -tulpn | grep :<port>
no space left on deviceडिस्क स्पेस या inodes ख़त्मdf -h और df -i, देखें disk space
वॉल्यूम फ़ाइल पर permission deniedUID मेल नहीं खा रहाdocker compose exec app id, फिर chown या PUID/PGID
ऐप्लिकेशन को डेटाबेस दिख नहीं रहाअलग नेटवर्क या localhost पर रिक्वेस्टदेखें Docker networks
Cannot connect to the Docker daemonसर्विस चल नहीं रही या आपके पास परमिशन नहीं हैsudo systemctl status docker, docker ग्रुप
सब कुछ धीमा है, लोड कम हैडिस्क बॉटलनेकiostat -x 2, देखें disk speed

कंटेनर क्रैश होता है, पर लॉग ख़ाली है

ऐसा तब होता है जब प्रोसेस कुछ प्रिंट करने से पहले ही मर जाता है। मुख्य कमांड की जगह इमेज को शेल के साथ मैन्युअली चलाएँ:

docker run --rm -it --entrypoint sh <image>

अंदर जाकर स्टार्टअप कमांड हाथ से चलाएँ — एरर स्क्रीन पर दिख जाएगी। वहीं रहते हुए यह भी देखें कि कॉन्फ़िगरेशन फ़ाइलें अपनी जगह पर हैं या नहीं:

docker compose run --rm app cat /app/config.yaml

बदलाव लागू नहीं हो रहे

क्लासिक मामला: आप फ़ाइल एडिट करते हैं, रीस्टार्ट करते हैं, और कुछ नहीं बदलता।

docker compose config          # does Compose see your changes
docker compose up -d --force-recreate app
docker compose exec app cat /etc/app/config.yaml

आम तौर पर दो कारण होते हैं: फ़ाइल वहाँ माउंट है जहाँ आप सोचते हैं वहाँ नहीं, या कंटेनर को बिल्ड के दौरान इमेज में गई एक कॉपी दिख रही है।

समस्या को docker system prune -a से ठीक न करें। यह बिना इस्तेमाल की इमेज, नेटवर्क और बिल्ड कैश हटा देता है, और --volumes फ़्लैग के साथ डेटा वाले वॉल्यूम भी। जिस कंटेनर को रोका गया हो, उसका वॉल्यूम उसी पल “बिना इस्तेमाल” का हो जाता है। पहले कारण पता करें, फिर सफ़ाई करें।

आख़िर में सफ़ाई कब करें

docker system df
docker image prune
docker builder prune
docker container prune

docker system df दिखाएगा कि असल में जगह क्या ले रहा है: इमेज, बिल्ड कैश, वॉल्यूम या कंटेनर लॉग। आम तौर पर बिल्ड कैश ही ज़िम्मेदार होता है — उसे हटाना सुरक्षित है।

अगर मशीन जवाब नहीं दे रही

SSH कनेक्ट नहीं होता, साइट नहीं खुलती — आम तौर पर किसी कंटेनर ने मेमोरी खा ली होती है और सिस्टम स्वैप में चला गया होता है। मशीन के पैनल में कंसोल से लॉगिन करें। htop और btop के लिए “Screen” मोड चाहिए: टेक्स्ट लाइन पर विंडो साइज़ पास नहीं होता, इसलिए यह हमेशा 80×24 ही रहता है।

free -h
sudo dmesg -T | tail -40
sudo systemctl restart docker

अगर सिस्टम बिल्कुल बूट ही नहीं हो रहा, तो “Access” टैब में बूट मोड को SystemRescue रिकवरी डिस्क पर स्विच करें: मशीन उसमें रीबूट हो जाएगी, बिना पासवर्ड के root लॉगिन, और डिस्क /dev/sda के रूप में दिखेगी। वहाँ से आप पार्टीशन माउंट करके डेटा निकाल सकते हैं।

बाद में नहीं, पहले क्या जाँचें

  • लॉग साइज़ लिमिट सेट हैं — देखें container logs।
  • सभी सर्विस के लिए मेमोरी लिमिट सेट हैं।
  • इमेज वर्ज़न पिन किए हुए हैं, और पुरानी इमेज डिलीट नहीं हुई है — देखें container updates।
  • डेटा की एक कॉपी मौजूद है और वेरिफ़ाई की हुई है — देखें restore drill।