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 الكامل بالعربي.