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

EXPOSE

تعليمة EXPOSE — توثيق المنفذ EXPOSE

EXPOSE توثّق أي منفذ يستمع عليه تطبيقك داخل الحاوية — توثيق فقط، لا تفتح المنفذ فعليًا ولا تغني عن -p عند التشغيل.

أشهر سوء فهم في Dockerfile: EXPOSE 3000 لا تجعل المنفذ متاحًا من خارج الحاوية بأي شكل — هي مجرّد توثيق يخبر من يقرأ الصورة (أو أدوات مثل docker run -P التي تربط المنافذ الموثَّقة تلقائيًا لمنافذ عشوائية على المضيف) أي منفذ يستمع عليه التطبيق. للوصول الفعلي من جهازك، تحتاج دائمًا -p <host>:<container> صريحة عند docker run بغضّ النظر عن وجود EXPOSE أو غيابها.

تقبل تحديد البروتوكول (tcp الافتراضي أو udp)، وتقدر تكرّرها لأكثر من منفذ في نفس الملف.

الصياغة

EXPOSE <port>[/<protocol>]

📄 مثال

FROM node:20-alpine
WORKDIR /app
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

# EXPOSE وحدها لا تكفي — لازم:
# docker run -p 3000:3000 myapp

أهم النقاط

الخيارالوظيفة
EXPOSE 80TCP افتراضيًا، توثيق فقط
EXPOSE 80/udpيوثّق منفذ UDP صراحة
docker run -Pتربط تلقائيًا كل منافذ EXPOSE الموثَّقة بمنافذ عشوائية على المضيف

💡 نصائح عملية

  • استخدم EXPOSE دائمًا حتى لو لن تعتمد عليها فعليًا — توثيق مفيد لأي شخص يقرأ الـ Dockerfile لاحقًا
  • لا تعتمد على EXPOSE للتحقق من أن التطبيق فعلًا يستمع على ذلك المنفذ — تحقّق بـ docker logs أو healthcheck

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

  • توقّع أن EXPOSE 3000 وحدها كافية للوصول للتطبيق من المتصفح — لن تعمل بدون -p صريحة عند التشغيل
  • نسيان تحديث EXPOSE بعد تغيير منفذ التطبيق فعليًا في الكود، فيصبح التوثيق مضلِّلًا

خصائص ذات صلة

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