تخطَّ إلى المحتوى

HEALTHCHECK

تعليمة HEALTHCHECK — فحص صحّة الحاوية HEALTHCHECK

HEALTHCHECK تخبر Docker كيف يتحقّق أن تطبيقك يعمل فعليًا لا مجرّد أن العملية قيد التشغيل — حالتها (healthy/unhealthy) تظهر في docker ps مباشرة.

حاوية قد تكون قيد التشغيل (running) لكن تطبيقها الداخلي معلَّق أو غير قادر على خدمة الطلبات — HEALTHCHECK يحلّ هذا بتنفيذ أمر فحص دوري (عادة طلب HTTP لنقطة /health) وقراءة كود خروجه: 0 يعني سليم، 1 يعني غير سليم. حالة الحاوية تنتقل من starting إلى healthy أو unhealthy حسب النتيجة، وتظهر مباشرة في عمود STATUS بأمر docker ps.

القيم الافتراضية إذا لم تُحدَّد صراحة: interval=30s (الفاصل بين كل فحص والذي يليه)، timeout=30s (المهلة القصوى لفحص واحد قبل اعتباره فاشلًا)، start-period=0s (مهلة إقلاع لا تُحتسب فيها الإخفاقات — مفيدة لتطبيقات بطيئة الإقلاع)، وretries=3 (عدد الإخفاقات المتتالية قبل اعتبار الحاوية unhealthy). مثل CMD وENTRYPOINT، آخر HEALTHCHECK فقط في الملف له تأثير.

الصياغة

HEALTHCHECK [--interval=30s] [--timeout=30s] [--start-period=0s] [--retries=3] CMD <command>
HEALTHCHECK NONE   # تعطيل أي healthcheck موروث من الصورة الأساس

📄 مثال

FROM node:20-alpine
WORKDIR /app
COPY . .
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
CMD ["node", "server.js"]

أهم النقاط

الخيارالوظيفة
--intervalالفاصل الزمني بين كل فحص والتالي — افتراضيًا 30s
--timeoutالمهلة القصوى لفحص واحد قبل اعتباره فاشلًا — افتراضيًا 30s
--start-periodمهلة إقلاع لا تُحتسب فيها الإخفاقات ضمن retries — افتراضيًا 0s
--retriesعدد الإخفاقات المتتالية قبل الانتقال لحالة unhealthy — افتراضيًا 3

💡 نصائح عملية

  • اجعل نقطة /health بسيطة وسريعة — لا تفحص فيها اتصالات خارجية بطيئة قد تجعل الحاوية unhealthy زورًا
  • ارفع --start-period لتطبيقات بطيئة الإقلاع (اتصال قاعدة بيانات أولي مثلًا) لتفادي حالة unhealthy مؤقتة عند كل تشغيل

⚠️ أخطاء شائعة

  • افتراض أن Docker يعيد تشغيل الحاوية تلقائيًا عند unhealthy — هذا غير صحيح افتراضيًا؛ Compose أو أداة تنسيق خارجية هي التي تتصرّف بناءً على الحالة
  • نسيان --start-period لتطبيق يحتاج ثوانٍ للإقلاع فتبدأ retries بالعدّ من اللحظة الأولى وتصل unhealthy قبل أن يجهز التطبيق أصلًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.