Skip to content
VDS · Docker ও কনটেইনার

Docker: সাধারণ সমস্যা সমাধান

কন্টেইনার বারবার রিস্টার্ট হচ্ছে, পোর্ট ব্যবহৃত, জায়গা নেই, “permission denied”, একটি সার্ভিস তার প্রতিবেশীকে দেখতে পাচ্ছে না — লক্ষণ ও সমাধান পদ্ধতির একটি টেবিল।

আপডেট: ২৩ আগস্ট, ২০২৬

প্রায় সব কন্টেইনার সমস্যাই এক ডজন সাধারণ সমস্যার মধ্যেই সীমাবদ্ধ। ডায়াগনোসিস সবসময় একই তিনটি কমান্ড দিয়ে শুরু হয়।

প্রথম তিনটি কমান্ড

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মেমরি শেষলিমিট বাড়ান বা লিক খুঁজুন, দেখুন রিসোর্স লিমিট
চালু হওয়ার সাথে সাথেই এক্সিট কোড 1কনফিগারেশন বা ভেরিয়েবলে ত্রুটিdocker compose config — সাবস্টিটিউশন যাচাই করুন
port is already allocatedপোর্টটি অন্য একটি প্রসেস দখল করে আছেsudo ss -tulpn | grep :<port>
no space left on deviceডিস্ক স্পেস বা আইনোড শেষdf -h এবং df -i, দেখুন ডিস্ক স্পেস
ভলিউমের ফাইলে permission deniedUID মিলছে নাdocker compose exec app id, তারপর chown বা PUID/PGID
অ্যাপ্লিকেশন ডেটাবেস দেখতে পাচ্ছে নাআলাদা নেটওয়ার্ক বা localhost-এ রিকোয়েস্টদেখুন Docker নেটওয়ার্ক
Cannot connect to the Docker daemonসার্ভিসটি চলছে না বা আপনার অনুমতি নেইsudo systemctl status docker, docker গ্রুপ
সবকিছু ধীর, লোড কমডিস্ক বটলনেকiostat -x 2, দেখুন ডিস্ক স্পিড

কন্টেইনার ক্র্যাশ করছে, কিন্তু লগ খালি

এটি ঘটে যখন প্রসেসটি কিছু প্রিন্ট করার আগেই মরে যায়। মূল কমান্ডের বদলে একটি শেল দিয়ে ইমেজটি ম্যানুয়ালি চালান:

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 কানেক্ট হচ্ছে না, সাইট খুলছে না — সাধারণত কোনো কন্টেইনার মেমরি খেয়ে ফেলেছে এবং সিস্টেম swap-এ চলে গেছে। মেশিন প্যানেলের কনসোল দিয়ে লগইন করুন। htop এবং btop-এর জন্য “Screen” মোড দরকার: টেক্সট লাইনের উপর দিয়ে উইন্ডোর সাইজ পাঠানো হয় না, তাই এটি সবসময় 80×24 থাকে।

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

সিস্টেম একেবারেই বুট না হলে, “Access” ট্যাবে বুট মোড SystemRescue রিকভারি ডিস্কে বদলে দিন: মেশিনটি সেটিতেই রিবুট হবে, পাসওয়ার্ড ছাড়াই root লগইন, আর ডিস্কটি /dev/sda হিসেবে দেখা যাবে। সেখান থেকে পার্টিশন মাউন্ট করে ডেটা উদ্ধার করতে পারবেন।

পরে নয়, আগে যা যাচাই করবেন

  • লগ সাইজের লিমিট সেট করা আছে — দেখুন কন্টেইনার লগ।
  • সব সার্ভিসের জন্য মেমরি লিমিট সেট করা আছে।
  • ইমেজের ভার্সন পিন করা আছে, আর পুরনো ইমেজ মুছে ফেলা হয়নি — দেখুন কন্টেইনার আপডেট।
  • ডেটার একটি কপি আছে এবং তা যাচাই করা হয়েছে — দেখুন রিস্টোর ড্রিল।