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میموری ختم ہو گئیحد بڑھائیں یا لیک تلاش کریں، دیکھیں ریسورس حدود
اسٹارٹ اپ کے فوراً بعد ایگزٹ کوڈ 1کنفیگریشن یا ویری ایبلز میں خرابیdocker compose config — سبسٹیٹیوشنز چیک کریں
port is already allocatedپورٹ کسی دوسرے پروسیس نے لے رکھا ہےsudo ss -tulpn | grep :<port>
no space left on deviceڈسک اسپیس یا inodes ختم ہو گئے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 کنیکٹ نہیں ہو رہا، سائٹ نہیں کھل رہی — عام طور پر کسی کنٹینر نے میموری کھا لی ہوتی ہے اور سسٹم سوئپ میں چلا جاتا ہے۔ مشین کے پینل میں کنسول کے ذریعے لاگ ان کریں۔ htop اور btop کے لیے "Screen" موڈ درکار ہے: ٹیکسٹ لائن پر ونڈو سائز پاس نہیں ہوتا، اس لیے یہ ہمیشہ 80×24 ہی رہتا ہے۔

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

اگر سسٹم بالکل بوٹ ہی نہ ہو رہا ہو، تو "Access" ٹیب میں بوٹ موڈ کو SystemRescue ریکوری ڈسک پر سیٹ کریں: مشین اس میں ری بوٹ ہو جائے گی، بغیر پاس ورڈ کے root لاگ ان، اور ڈسک /dev/sda کے طور پر نظر آئے گی۔ وہاں سے آپ پارٹیشن ماؤنٹ کر کے ڈیٹا نکال سکتے ہیں۔

بعد میں نہیں، پہلے کیا چیک کریں

  • لاگ سائز کی حدود سیٹ ہیں — دیکھیں کنٹینر لاگز۔
  • تمام سروسز کے لیے میموری کی حدود سیٹ ہیں۔
  • امیج ورژنز پن ہیں، اور پرانی امیج ڈیلیٹ نہیں ہوئی — دیکھیں کنٹینر اپڈیٹس۔
  • ڈیٹا کی کاپی موجود ہے اور تصدیق شدہ ہے — دیکھیں ریسٹور ڈرل۔