مشاركة مساحة أسماء شبكة حاوية VPN تمنح تطبيقك واجهات النفق ومساره. وهي لا تمنحه محلل أسماء النفق، ولا نسخة مدموجة من أي شيء آخر على المضيف. تُنتج هذه الفجوة عطلًا محددًا جدًا: الأسماء العامة تُحل، والأسماء الداخلية لا تُحل، والتطبيق الذي يفشل يبدو وكأنه يستخدم خادم DNS خاطئًا لأنه كذلك فعلًا. والإصلاح عادةً أصغر مما يوحي به التشخيص.

الخطوة 1: اختبر من التطبيق، لا من المضيف

نفّذ البحث داخل الحاوية التي بها المشكلة، لا على المضيف ولا في المتصفح. docker exec app-container getent hosts db.internal يجيب عن السؤال الوحيد المهم، وهو ما يعيده محلل أسماء هذه العملية.

إذا حلّ المضيف الاسم ولم تحلّه الحاوية، فقد وجدت العطل. وكل ما يأتي بعد ذلك هو اختيار طريقة مدعومة لإصلاحه.

الخطوة 2: اقرأ النموذج المدعوم في وقت التشغيل

توثيق شبكة Docker يسجّل قيودًا على أعلام DNS للحاويات التي تشترك في نمط شبكة حاوية أخرى. في Compose، network_mode: service:vpn يربط التطبيق بمساحة أسماء حاوية VPN، ولكل خدمة dns لا تتصرف الإعدادات بالطريقة نفسها التي تتصرف بها مع خدمة عادية. الحل الذي تحصل عليه هو الحل الذي تملكه مساحة الأسماء المشتركة.

تستخدم شبكات الجسر المعرّفة من المستخدم أيضًا DNS المدمج في Docker بشكل مختلف عن الجسر الافتراضي. ولهذا فإن dns مقطعًا منسوخًا من مثال جسر ناجح قد لا يفعل شيئًا على الإطلاق في حزمة مشتركة. تحقق من الترتيب قبل نسخ المقطع.

يشير عنوان الاسترجاع دائمًا إلى سياق الشبكة المعني. داخل مساحة أسماء مشتركة، فإن 127.0.0.1 ليس محلل أسماء المضيف.

الخطوة 3: تتبّع الاستعلام إلى متلقيه

اقرأ إعداد محلل الأسماء في التطبيق، ثم أي DNS مشفّر خاص بالتطبيق يأتي معه، لأن التطبيق الذي يشغّل محلل أسماء خاصًا به يتجاهل الملف الذي حرّرته. ثم تحقق مما إذا كان محلل الأسماء المختار قابلًا للوصول ضمن مسارات VPN وسياسة جدار الحماية. عنوان محلل أسماء على الجانب البعيد من النفق عديم الفائدة إذا لم يكن لمساحة الأسماء مسار إليه. أكّد المتلقي قبل تحرير أي ملف.

لا تستطيع صفحة فحص IP في المتصفح أن تخبرك أين ذهبت استعلامات الأسماء. إنها تخبرك أين ذهب اتصال HTTP واحد.

الخطوة 4: أصلح فئتي العطل بشكل مختلف

إذا فشلت أسماء الخدمات بينما تعمل الأسماء العامة، فالمشكلة في اكتشاف الخدمات داخل شبكة الحاويات، لا في قائمة محللات الأسماء العامة. تغيير كل عنوان DNS عام لن ينشئ سجلات لم تُطلب من آلية الاكتشاف في الشبكة قط.

إذا فشلت الفئتان معًا، فابدأ بقابلية الوصول إلى محلل الأسماء. وإذا فشلت واحدة فقط، فابدأ بآلية الاكتشاف. للاثنتين مالكَان مختلفان، ولهذا لا يغطي إصلاح واحد الاثنتين أبدًا.

الخطوة 5: أعد الاختبار بعد إعادة الإنشاء

غيّر الإعداد عبر الآلية المدعومة في وقت التشغيل، ثم أعد إنشاء الحاويات بدلًا من تحرير ملفات داخل حاوية قيد التشغيل. اختبر اسمًا خاصًا جديدًا، واسمًا عامًا جديدًا، وطلب التطبيق الذي يلي البحث. وأي تعديل على /etc/resolv.conf داخل حاوية يزول عند إعادة الإنشاء وسيقنعك بأن الإصلاح نجح حين لم ينجح.

سجّل مالك محلل الأسماء ومساحة الأسماء المتوقعة بجانب تعريف الشبكة المشتركة. سيحتاج الشخص التالي إلى الاثنين.

مقالات ذات صلة