عندما يتعلق الأمر بتشغيل حاويات Docker على شبكة خاصة تحتوي على خوادم DNS خاصة، قد تواجه بعض التحديات في الحصول على قدرة الحاويات على حل أسماء المضيفين بشكل صحيح. فالمشكلة تكمن في أن إعدادات الـ DNS داخل الحاوية لا تعرف عنوان خادم DNS الخاص بالشبكة الخاصة. في الواقع، يظهر من الشفرات التي قدمتها أن عنوان الـ DNS داخل الحاوية مُعين على خوادم DNS عامة مثل خوادم Google (8.8.8.8 و 8.8.4.4)، وهذا بالطبع لن يمكنها من حل أسماء المضيفين الخاصة بك.
من الواضح أن الحل البسيط هو تعيين عنوان الـ DNS الخاص بالشبكة الخاصة داخل إعدادات Docker. يمكنك القيام بذلك يدويًا عن طريق تشغيل Docker مع مفتاح --dns
وتحديد عنوان الـ DNS، وهذا ما قمت بذكره بالفعل. لكن، يواجه البعض تحديات عند التنقل بين الشبكات، وهذا يتطلب تغيير يدوي لإعدادات Docker كلما حدث تغيير في الشبكة.
هناك طريقة أكثر تنظيمًا وأتمتة لهذا الحل، وهي باستخدام “Docker Network Drivers”. يمكنك إنشاء شبكة خاصة في Docker وتحديد عنوان الـ DNS الخاص بها. هذا سيضمن أن تتم إعادة تكوين إعدادات DNS تلقائيًا لجميع الحاويات التي تنضم إلى هذه الشبكة. لنقم بذلك خطوة بخطوة:
أولاً، يمكنك إنشاء شبكة خاصة جديدة في Docker باستخدام الأمر التالي:
bashdocker network create --driver bridge --subnet 192.168.0.0/24 --dns 192.168.0.1 my_custom_network
في هذا الأمر، قمنا بتحديد محرك الشبكة بالقيمة “bridge” ونطاق IP للشبكة الخاصة وعنوان DNS الخاص بها.
ثم، يمكنك تشغيل حاوية جديدة والانضمام إليها إلى هذه الشبكة باستخدام الأمر التالي:
bashdocker run --network=my_custom_network -d your_container_image
بهذا، ستكون حاويتك الجديدة الآن قادرة على حل أسماء المضيفين باستخدام عنوان الـ DNS الخاص بالشبكة الخاصة.
هذا الحل يعتبر أكثر تنظيمًا وتمويلاً ويعني أنه لن يكون عليك التدخل يدويًا في إعدادات Docker كلما حدث تغيير في الشبكة.
المزيد من المعلومات
بالطبع، لا يتوقف دعم Docker عند هذا الحد. يمكن أيضًا استخدام خوادم DNS مخصصة داخل ملفات التكوين لـ Docker لضمان حل المشكلة بشكل دائم وتلقائي.
في ملفات التكوين لـ Docker، يمكنك تحديد إعدادات DNS المخصصة التي يجب استخدامها عند بناء وتشغيل الحاويات. يمكنك القيام بذلك عبر ملف daemon.json
الذي يحتوي على إعدادات Docker العامة.
هذه خطوات توضيحية لتحديد خادم DNS مخصص في Docker:
-
قم بإنشاء ملف
daemon.json
في المسار/etc/docker/
إذا لم يكن موجودًا بالفعل. -
قم بتحرير الملف المنشأ باستخدام محرر نصوص مفضل لديك، مثل Vim أو Nano.
-
أضف الإعدادات التالية إلى الملف
daemon.json
:
json{
"dns": ["192.168.0.1"]
}
-
احفظ التغييرات وأغلق المحرر.
-
أعد تشغيل خدمة Docker لتحميل التغييرات باستخدام الأمر:
bashsudo systemctl restart docker
بعد هذه الخطوات، ستقوم Docker الآن بتضمين عنوان الـ DNS المخصص في إعداداتها عند تشغيل الحاويات، مما يسمح لها بحل أسماء المضيفين بنجاح في الشبكة الخاصة بك.
تذكر أنه قد تحتاج إلى صلاحيات المسؤول (sudo) لتنفيذ هذه الإجراءات، وتأكد أيضًا من أن تكون ملفات التكوين لديك متوافقة مع بيئة نظام التشغيل الخاصة بك.
بهذه الطريقة، يمكنك ضمان حل المشكلة بشكل دائم دون الحاجة إلى التدخل اليدوي كلما حدث تغيير في الشبكة، مما يجعل عملية إدارة Docker أكثر سلاسة وسهولة وتوافقاً مع بيئتك.