اگر Docker Container بالا نمی‌آید، معمولا مشکل از تنظیمات اشتباه Port، خطای Image، مشکل Volume، کمبود منابع یا اجرای ناقص Service هاست. خطای Docker Container یکی از رایج‌ترین مشکلات توسعه دهنده‌های Backend و DevOps محسوب می‌شود و تقریبا هر کسی که با Docker کار کرده حداقل یک بار با آن روبرو شده است. بیشتر این خطاها با بررسی Log ها و تنظیمات Container خیلی سریع قابل حل هستند.

Docker Container چیست؟

Docker Container محیطی ایزوله برای اجرای برنامه هاست. هر کانتینر تمام وابستگی‌های مورد نیاز برنامه را داخل خودش نگه می‌دارد و مستقل از سیستم اصلی اجرا می‌شود.

مثلا وقتی این دستور اجرا می‌شود:

docker run nginx

یک Container جدید از Nginx ساخته و اجرا می‌شود.

مزیت اصلی Docker این است که:

  • اجرای پروژه روی همه سیستم‌ها یکسان می‌شود
  • وابستگی‌ها جدا نگه داشته می‌شوند
  • Deploy پروژه ساده‌تر می‌شود

اما اگر تنظیمات اشتباه باشند، Container بالا نمی‌آید یا بلافاصله Crash می‌کند.

چرا Docker Container بالا نمی‌آید؟

دلایل مختلفی وجود دارد اما بعضی مشکلات بیشتر از بقیه دیده می‌شوند.

مشکل در Port Mapping

یکی از رایج‌ترین مشکلات مربوط به Port هاست.

مثلا:

docker run -p 80:80 nginx

اگر Port 80 قبلا توسط سرویس دیگری استفاده شده باشد، Docker نمی‌تواند Container را اجرا کند.

نمونه خطا:

Bind for 0.0.0.0:80 failed

یعنی Port قبلا اشغال شده است.

روش حل مشکل Port

برای بررسی Port های فعال:

sudo lsof -i :80

یا:

sudo netstat -tulpn

بعد:

  • سرویس قبلی را متوقف کنید
  • یا از Port دیگری استفاده کنید

مثلا:

docker run -p 8080:80 nginx

Crash شدن برنامه داخل Container

گاهی Docker سالم است اما خود برنامه مشکل دارد.

مثلا:

  • Syntax Error
  • Dependency ناقص
  • فایل پیدا نشده
  • اتصال ناموفق به دیتابیس

در این شرایط Container اجرا می‌شود اما چند ثانیه بعد متوقف می‌شود.

بررسی Log های Container

اولین کاری که باید انجام دهید این است:

docker logs container_name

خیلی وقت‌ها دلیل اصلی خطا دقیقا داخل Log مشخص است.

مثلا:

ModuleNotFoundError

یا:

Connection refused

مشکل در Dockerfile

بعضی وقت‌ها Dockerfile اشتباه نوشته شده است.

مثلا:

CMD python app.py

در حالی که فایل app.py وجود ندارد.

یا مسیر اشتباه تعریف شده است.

نمونه خطا:

No such file or directory

مشکل در Volume ها

گاهی Volume ها اشتباه Mount می‌شوند.

مثلا:

-v /data:/app/data

اما مسیر اصلی وجود ندارد یا دسترسی لازم را ندارد.

نتیجه:

  • فایل ها پیدا نمی‌شوند
  • برنامه اجرا نمی‌شود
  • Container متوقف می‌شود

کمبود RAM یا CPU

اگر سرور منابع کافی نداشته باشد:

  • Container کند می‌شود
  • Kill می‌‌شود
  • Restart Loop اتفاق می‌افتد

برای بررسی مصرف منابع:

docker stats

اگر RAM یا CPU بیش از حد مصرف شده باشد، باید منابع سرور بررسی شوند.

مشکل در Environment Variable

خیلی از پروژه‌ها بدون ENV اجرا نمی‌شوند.

مثلا:

DATABASE_URL
SECRET_KEY
REDIS_HOST

اگر این متغیرها تعریف نشده باشند، برنامه موقع Start دچار خطا می‌شود.

مشکل در Docker Compose

بعضی وقت‌ها مشکل از تنظیمات Compose است.

مثلا:

depends_on:
  - db

بعضی افراد فکر می کنند این بخش یعنی دیتابیس کامل آماده اجراست.

در حالی که فقط ترتیب Start شدن سرویس‌ها را مشخص می‌کند.

نتیجه:

  • API زودتر اجرا می‌شود
  • اتصال به Database شکست می‌خورد
  • Container Crash می‌کند

رایج‌ترین خطاهای Docker Container

خطای Exited (1)

اگر این وضعیت را ببینید:

Exited (1)

یعنی برنامه داخل Container با خطا متوقف شده است.

معمولا مشکل از:

  • برنامه
  • Dependency
  • تنظیمات

است.

خطای Restart Loop

گاهی Container مدام Restart می‌شود.

مثلا:

  • اجرا می‌شود
  • Crash می‌کند
  • دوباره اجرا می‌شود

این مشکل معمولا به خاطر:

  • Health Check اشتباه
  • اتصال ناموفق به سرویس دیگر
  • Error داخل برنامه

اتفاق می‌افتد.

خطای Permission Denied

نمونه:

Permission denied

علت معمولا:

  • دسترسی اشتباه فایل‌ها
  • User نامناسب
  • Volume Permission

است.

خطای Image Not Found

مثلا:

pull access denied

یعنی Docker نمی‌تواند Image را پیدا کند یا دسترسی لازم وجود ندارد.

روش اصولی حل خطای Docker Container

مرحله اول: بررسی وضعیت Container

اول این دستور را اجرا کنید:

docker ps -a

ببینید وضعیت Container چیست:

  • Running
  • Exited
  • Restarting

این مرحله خیلی مهم است.

مرحله دوم: بررسی Log ها

مهم‌ترین مرحله Debug همین است:

docker logs container_name

در بیشتر مواقع، دلیل اصلی مشکل همینجا مشخص می‌شود.

مرحله سوم: اجرای Interactive

برای بررسی داخل کانتینر:

docker run -it image_name bash

این روش کمک می‌کند فایل‌ها و مسیرها را مستقیم بررسی کنید.

مرحله چهارم: بررسی منابع سرور

اگر سرور ضعیف باشد، حتی پروژه سالم هم ناپایدار می‌شود.

بررسی منابع:

docker stats

مرحله پنجم: بررسی Docker Compose

بخش‌های زیر را دقیق چک کنید:

  • Port
  • ENV
  • Volume
  • Network
  • depends_on

بیشتر مشکلات از همین قسمت‌ها شروع می‌شوند.

اشتباهات رایج برنامه نویسان Docker

استفاده از latest

این اشتباه خیلی رایج است:

image: redis:latest

نسخه latest ممکن است تغییر کند و پروژه ناگهان خراب شود.

بهتر است Version ثابت استفاده شود.

ذخیره Secret داخل Dockerfile

مثلا:

ENV SECRET_KEY=123456

این کار امنیت پروژه را پایین می‌آورد.

بهتر است از فایل ENV استفاده شود.

اجرای همه سرویس‌ها داخل یک Container

بعضی افراد:

  • Nginx
  • Redis
  • API
  • Worker

را داخل یک Container اجرا می‌کنند.

این روش مدیریت و Debug پروژه را سخت می‌کند.

نداشتن Health Check

اگر Health Check نداشته باشید، Docker متوجه خراب بودن سرویس نمی‌شود.

روش جلوگیری از خطای Docker Container

همیشه Log مناسب داشته باشید

بدون Log عملا پیدا کردن مشکل سخت می‌شود.

Dockerfile را ساده نگه دارید

Dockerfile پیچیده:

  • احتمال خطا را بالا می‌برد
  • Build را کند می‌کند
  • نگهداری پروژه را سخت می‌کند

از Multi Stage Build استفاده کنید

این روش:

  • حجم Image را کمتر می‌کند
  • امنیت را بهتر می‌کند
  • Deploy را سریع تر می‌کند

مانیتورینگ سرور را جدی بگیرید

ابزارهایی مثل:

  • Prometheus
  • Grafana
  • Portainer

برای مانیتورینگ Docker خیلی مفید هستند.

جمع بندی

خطای Docker Container معمولا به خاطر تنظیمات اشتباه Port، مشکل برنامه داخل Container، تنظیمات نادرست Docker Compose یا کمبود منابع سرور ایجاد می‌شود. مهم‌ترین مرحله برای پیدا کردن مشکل بررسی Log هاست. اگر ساختار Dockerfile، Volume و ENV را اصولی مدیریت کنید، بیشتر این خطاها خیلی سریع قابل حل هستند.