ENTRYPOINT
تعليمة ENTRYPOINT — الأمر الثابت ENTRYPOINT
ENTRYPOINT تجعل الصورة تتصرّف كأمر تنفيذي ثابت — بعكس CMD، وسائط docker run تُضاف إليه لا تستبدله (إلا بعلم --entrypoint صراحة).
الفرق الجوهري عن CMD: docker run myapp --port 8080 مع CMD يستبدل الأمر بالكامل، لكن مع ENTRYPOINT يضيف --port 8080 كوسائط للأمر الثابت. هذا يجعل ENTRYPOINT مناسبة للصور التي تريدها تتصرّف كأداة CLI محدّدة الغرض لا كحاوية عامة تقبل أي أمر.
مثل CMD، الصيغة التنفيذية ENTRYPOINT ["node", "server.js"] موصى بها لأنها لا تمرّ عبر shell وسيط فتصل إشارات إيقاف النظام (SIGTERM) للتطبيق مباشرة فيغلق بسلاسة. لو دمجت ENTRYPOINT (بالصيغة التنفيذية) مع CMD (بالصيغة التنفيذية أيضًا)، محتوى CMD يصبح وسائط افتراضية لـ ENTRYPOINT، قابلة للاستبدال بسهولة عند docker run.
الصياغة
ENTRYPOINT ["executable", "param1"] # exec form، موصى بها ENTRYPOINT command param1 # shell form
📄 مثال
FROM node:20-alpine WORKDIR /app COPY . . ENTRYPOINT ["node", "server.js"] CMD ["--port", "3000"] # docker run myapp → node server.js --port 3000 # docker run myapp --port 8080 → node server.js --port 8080 (يستبدل وسائط CMD فقط)
أهم النقاط
| الخيار | الوظيفة |
|---|---|
| exec form | موصى بها؛ إشارات إيقاف النظام تصل للتطبيق مباشرة دون shell وسيط |
| مع CMD | CMD تصبح وسائط افتراضية قابلة للاستبدال، وENTRYPOINT الأمر الثابت الذي لا يتغيّر |
| --entrypoint | علم في docker run يستبدل ENTRYPOINT نفسه بالكامل عند الحاجة (نادر) |
💡 نصائح عملية
- استخدم ENTRYPOINT للصور المخصَّصة لغرض واحد (أداة CLI، معالج صور)، وCMD وحدها للصور العامة التي قد تشغّل أوامر مختلفة
- الصيغة التنفيذية لكلتيهما معًا هي الأنسب دائمًا — تتجنّب مشاكل shell وسيط وإشارات النظام
⚠️ أخطاء شائعة
- استخدام الصيغة النصّية لـ ENTRYPOINT فيصبح PID 1 هو /bin/sh لا تطبيقك، فلا تصله إشارات الإيقاف مباشرة
- توقّع أن docker run myapp node -v يستبدل ENTRYPOINT مثل CMD تمامًا — في الحقيقة يضيف node -v كوسائط للأمر الثابت
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.