Docker / أسس الصور والحاويات / الدرس 6
الشبكات و DNS والمستمعات والمنافذ المنشورة
تتبّع الحركة من العميل عبر نطاق شبكته إلى العملية المستمعة.
في هذه الصفحة
أهداف الدرس
- ميّز EXPOSE وربط التطبيق ونشر المضيف.
- استخدم أسماء الخدمات ومنافذ الحاويات داخل الشبكة المشتركة.
ينتمي localhost إلى المستدعي
لكل نطاق شبكة حاوية عادي واجهة loopback مستقلة. يعني localhost داخل العامل العامل نفسه لا API أخرى ولا المضيف تلقائياً. تستطيع الخدمات ضمن شبكة معرفة من المستخدم حسم أسماء بعضها. شخّص مكان المستدعي أولاً؛ فمتصفح المضيف وحاوية أخرى يسلكان مسارين مختلفين للخدمة نفسها.
يجب اتساق ثلاث حقائق للمنفذ
يجب أن تستمع العملية على عنوان متاح عبر واجهة الحاوية، وهنا 0.0.0.0:8080. تسجل EXPOSE 8080 بيانات فقط. ينشر ports عنوان ومنفذ مضيف إلى منفذ حاوية. لن يصلح تعيين 80 عملية تستمع عند 8080. قد يكشف النشر العام الخدمة خارج الجهاز، فاختر نطاق الربط عمداً.
services:
api:
image: parcel-api:lab
ports:
- "127.0.0.1:18080:8080"
networks:
- parcel-net
networks:
parcel-net: {}
يستخدم عميل المضيف http://127.0.0.1:18080/، ويستخدم النظير على parcel-net عادة http://api:8080/. لا يجعل التعيين api:18080 وجهة داخلية ولا يعد بالوصول من جهاز آخر. لا يشغل عرض الملف شيئاً.
تتبع الأسماء عضوية الشبكة
تنشئ Compose عادة شبكة مشروع واكتشافاً بأسماء الخدمات، وتحدد الشبكات الصريحة من يتصل بمن. لا تثبت عنوان حاوية من تشغيل واحد؛ فقد يتغير مع الاستبدال ويبقى الاسم هو العقد. لا يثبت حسم الاسم سوى العثور على عنوان، لا انفتاح المنفذ أو الجاهزية أو وجود المسار.
docker compose port api 8080
docker network inspect parcel-lab_parcel-net
docker container inspect parcel-api --format '{{json .NetworkSettings.Networks}}'
أسماء المشروع والحاوية توضيحية وليست أسماء مولدة مضمونة؛ خذ الفعلية من المشروع المعتمد. يعرض port النشر و network inspect نقاط الاتصال وفحص الحاوية العضوية. سجل المشاهدات ولا تختلق عناوين أو تفترض ملكية السياق للكائنات.
صنّف طبقة الفشل
يختلف خطأ الاسم عن رفض الاتصال والمهلة و HTTP 404. يعني الرفض غالباً عدم قبول مستمع على العنوان والمنفذ؛ وقد تتصل المهلة بالتوجيه أو الترشيح أو هدف غير مستجيب. يثبت 404 جواب خادم HTTP لا صحة مسار التطبيق. افحص النطاق والاسم والمنفذ والمستمع والنشر والمسار قبل قواعد الجدار.
اقصر الكشف على المستهلكين المطلوبين
يحتاج الاتصال الداخلي عادة شبكة مناسبة لا منفذ قاعدة منشوراً. تحتاج المداخل العامة إلى حافة مدروسة وتشفير ومصادقة حسب الحاجة وفهم الجدار. يختلف التنفيذ بين Linux و rootless وآلات Desktop وشبكة المضيف. وثق الوضع وتحقق منه ولا تعتبر نجاح الحاسوب دليلاً على كشف أو عزل إنتاج مماثل.
الأخطاء الشائعة وإصلاحها
Connection refused at localhost from a peer container.
- لماذا يحدث؟
- خاطب النظير عنوانه المحلي بدلاً من API.
- كيف تصلحه؟
- استخدم اسم API ضمن الشبكة ومنفذ مستمعها الفعلي.
- كيف تتجنب تكراره؟
- وثق أصل الطلب والروابط الداخلية وروابط المضيف منفصلة.
يوجد تعيين المضيف لكن API غير متاحة.
- لماذا يحدث؟
- تستمع العملية على loopback الحاوية أو على منفذ آخر.
- كيف تصلحه؟
- طابق ربط التطبيق ومنفذ الهدف قبل تغيير الكشف.
- كيف تتجنب تكراره؟
- افحص المستمع والنشر كمسألتين مستقلتين.
يتوقف عنوان حاوية مثبت بعد الاستبدال.
- لماذا يحدث؟
- اعتُبرت هوية نقطة ديناميكية عقد خدمة ثابتاً.
- كيف تصلحه؟
- استخدم اكتشاف الخدمة المدعوم وحدّث الاتصالات.
- كيف تتجنب تكراره؟
- لا تحفظ عناوين الحاويات المكتشفة في إعداد التطبيق.
اختبر فهمك
1. ما وجهة عامل على الشبكة نفسها نحو API المثال؟
اعرض الحل المشروح
استخدم api:8080 لكونه اسم خدمة Compose ومنفذ الحاوية. أما 127.0.0.1:18080 فنشر المضيف. أكد اشتراك الخدمتين في الشبكة؛ فلا يعبر الاسم وحده عضويات منفصلة.
2. هل يبرر HTTP 404 فتح منفذ مضيف آخر؟
اعرض الحل المشروح
ليس وحده؛ فقد أجاب خادم HTTP. افحص المضيف وهوية التطبيق والمسار أولاً. قد يوسع نشر آخر الكشف دون إصلاح المسار. حافظ على فرق الوصول النقلي ومعنى استجابة التطبيق.
أهم ما تعلمته
- توثق EXPOSE ويقبل المستمع ويعين النشر وصول المضيف.
- حدد نطاق المستدعي قبل تفسير localhost.