إصلاح مشكلة عدم الاتصال بـ Docker Daemon
عندما ترى رسالة الخطأ “لا يمكن الاتصال بـ Docker daemon على ‘unix:///var/run/docker.sock’“، فهذا يعني عادةً أن الأوامر مثل `docker run` أو `docker ps` لن تعمل. ونتيجة لذلك، لا يمكنك التفاعل مع حاويات Docker. يحدث هذا الخطأ لأن عميل Docker لا يستطيع الاتصال بـ Docker daemon، وهو البرنامج الأساسي الذي يتعامل مع جميع عمليات Docker على جهاز الكمبيوتر الخاص بك.

السبب الأكثر شيوعًا لهذه المشكلة هو أن خدمة Docker لا تعمل على نظامك. تشمل الأسباب المحتملة الأخرى عدم امتلاك الأذونات اللازمة للوصول إلى Docker socket، أو وجود مشكلات في كيفية تثبيت Docker، أو مشاكل في ملف `docker.sock` نفسه.
الآن بعد أن أصبحت لديك فكرة عن الأسباب المحتملة، دعنا ننتقل إلى بعض الحلول العملية.
1. بدء خدمة Docker باستخدام systemctl
أول شيء يجب التحقق منه هو ما إذا كان Docker يعمل. تتيح لك أداة `systemctl` بدء خدمات النظام وإدارتها. إذا لم يكن Docker نشطًا، فلن يتمكن عميل Docker من التواصل مع عملية Docker الرئيسية، مما يسبب هذا الخطأ. يؤدي تشغيل الأمر `systemctl start docker` إلى بدء خدمة Docker ويجب أن يحل المشكلة إذا كانت ببساطة غير نشطة.
- افتح الطرفية وقم بتشغيل الأمر التالي أولاً لـ إلغاء إخفاء Docker:
sudo systemctl unmask docker
إذا حاولت بدء Docker بينما هو مخفي (masked)، فسترى الخطأ “Failed to start docker.service: Unit is masked.” الإخفاء هو طريقة أقوى لإيقاف خدمة ما – فهو يمنع الخدمة من البدء تمامًا. إذا كنت ترغب في رؤية حالة جميع ملفات الوحدات على نظامك، استخدم systemctl list-unit-files.
- بمجرد أن يصبح Docker غير مخفي، يمكنك بدء Docker daemon باستخدام هذا الأمر. Docker daemon هو الخدمة الخلفية التي تدير الصور والحاويات وتعالج طلبات API الخاصة بـ Docker.
sudo systemctl start docker

- لـ التحقق مما إذا كان Docker يعمل، أدخل هذا الأمر. سيعرض لك الحالة الحالية لخدمة Docker:
sudo systemctl status docker

- كما ترى في الصورة أعلاه، يجب أن ترى الآن أن Docker نشط ويعمل.
2. تنظيف “سحب Docker فاشل” وبدء خدمة Docker
في بعض الأحيان، إذا فشل سحب Docker، فقد يترك وراءه ملفات غير مكتملة تمنع Docker daemon من البدء بشكل صحيح. إزالة هذه الملفات المتبقية تمنح Docker بداية جديدة. يساعد إعادة تشغيل خدمة Docker بعد ذلك في حل أي مشكلات قد تسببها الملفات العالقة أو التالفة.
- افتح الطرفية وأدخل هذه الأوامر:
sudo systemctl unmask docker.service sudo systemctl unmask docker.socket sudo systemctl start docker.service

إذا استمر ظهور الخطأ بعد تشغيل هذه الأوامر، فيجب عليك حذف الملفات المتبقية في دليل Containerd، ثم محاولة بدء تشغيل Docker مرة أخرى. يساعد Containerd، الذي أصبح جزءًا من Docker في الإصدار 1.11، في إدارة حاويات Docker مباشرة من الخلفية.
- ابقَ في Terminal وقم بتشغيل هذه الأوامر—لاحظ أنك ستحتاج إلى كلمة مرور المستخدم الجذر (root):
sudo su service docker stop cd /var/run/docker/libcontainerd rm -rf containerd/* rm -f docker-containerd.pid service docker start

3. بدء خدمة Dockerd (Docker Daemon) مباشرة
Dockerd هو البرنامج الرئيسي (الخفي) الذي يعمل في الخلفية ويتولى جميع مهام Docker. في بعض الحالات، يمكن أن يساعد بدء تشغيل Dockerd مباشرة، خاصة إذا كان استخدام أمر `systemctl` لا يعمل على نظامك.
- افتح Terminal واستخدم هذا الأمر لبدء تشغيل Docker daemon مباشرة:
sudo dockerd

4. بدء تشغيل Docker باستخدام أمر Service
يمكن أن يضمن بدء تشغيل Docker يدويًا أن الخدمة تعمل. يمكنك استخدام الأمر `sudo service docker start` لبدء تشغيل Docker، وهو مفيد إذا لم يبدأ Docker تلقائيًا بعد إعادة تشغيل النظام.
- افتح Terminal الخاص بك وقم بالتشغيل:
sudo service --status-all sudo service docker start

5. بدء خدمة Docker باستخدام Snap
إذا قمت بتثبيت Docker باستخدام Snap، فأنت بحاجة إلى التأكد من أن خدمة Docker التي يديرها Snap تعمل. يتطلب Snap أحيانًا منك بدء الخدمات أو توصيلها بنفسك. استخدم `sudo snap start docker` للتأكد من أن Docker daemon يعمل كما هو متوقع.
- افتح Terminal وقم بتشغيل هذا الأمر لـ بدء تشغيل Docker:
sudo snap start docker

- للتحقق مما إذا كان Docker قد بدأ بشكل صحيح باستخدام Snap، استخدم:
sudo snap services
- سيؤدي هذا إلى سرد جميع خدمات Snap قيد التشغيل:

- إذا لم يبدأ Docker بعد، فحاول توصيل المكون الإضافي docker:home، والذي لا يتم توصيله تلقائيًا دائمًا. ثم أعد تشغيل Docker.
- افتح Terminal وقم بالتنفيذ:
sudo snap connect docker:home :home sudo snap start docker

6. بدء تشغيل Docker للمستخدمين بدون امتيازات الجذر
يمكن أن يحدث هذا الخطأ أيضًا إذا لم يكن لديك إذن كافٍ للوصول إلى ‘unix:///var/run/docker.sock’. يمكنك تجاوز هذا مؤقتًا عن طريق تصدير متغير مضيف Docker لاستخدام واجهة الشبكة المحلية عبر المنفذ 2375.
- افتح Terminal وقم بالتشغيل:
export DOCKER_HOST=tcp://localhost:2375

7. إعادة تثبيت Docker
في بعض الأحيان، قد تمنع المشكلات المتعلقة بكيفية تثبيت Docker — مثل الملفات التالفة أو الإعدادات الخاطئة — تشغيل Docker daemon بشكل صحيح. تؤدي إعادة تثبيت Docker إلى إعادة كل شيء إلى حالته الافتراضية ويمكن أن تصلح المشكلات الناتجة عن الإعدادات المعطلة أو المتعارضة.
- بعد إعادة تثبيت Docker، تأكد من أن الخدمة تعمل باستخدام الأمر التالي:
sudo service docker start
سيقوم هذا الأمر بتشغيل Docker وغالبًا ما يصلح المشكلات عندما لا يكون البرنامج نشطًا، خاصة بعد إعادة تشغيل الكمبيوتر أو إذا فشل Docker في التشغيل تلقائيًا.
- نظرًا لأن Docker daemon يتحكم في جميع الحاويات والصور، فإن التأكد من تشغيله يعيد الاتصال بين عميل Docker والـ daemon، مما يمكن أن يصلح الأخطاء الناتجة عن توقف الخدمة أو عدم نشاطها.






Comments are closed.