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

خطأ اتصال Docker

السبب الأكثر شيوعًا لهذه المشكلة هو أن خدمة Docker لا تعمل على نظامك. تشمل الأسباب المحتملة الأخرى عدم امتلاك الأذونات اللازمة للوصول إلى Docker socket، أو وجود مشكلات في كيفية تثبيت Docker، أو مشاكل في ملف `docker.sock` نفسه.

الآن بعد أن أصبحت لديك فكرة عن الأسباب المحتملة، دعنا ننتقل إلى بعض الحلول العملية.

1. بدء خدمة Docker باستخدام systemctl

أول شيء يجب التحقق منه هو ما إذا كان Docker يعمل. تتيح لك أداة `systemctl` بدء خدمات النظام وإدارتها. إذا لم يكن Docker نشطًا، فلن يتمكن عميل Docker من التواصل مع عملية Docker الرئيسية، مما يسبب هذا الخطأ. يؤدي تشغيل الأمر `systemctl start docker` إلى بدء خدمة Docker ويجب أن يحل المشكلة إذا كانت ببساطة غير نشطة.

  1. افتح الطرفية وقم بتشغيل الأمر التالي أولاً لـ إلغاء إخفاء Docker:
    sudo systemctl unmask docker

    إذا حاولت بدء Docker بينما هو مخفي (masked)، فسترى الخطأ “Failed to start docker.service: Unit is masked.” الإخفاء هو طريقة أقوى لإيقاف خدمة ما – فهو يمنع الخدمة من البدء تمامًا. إذا كنت ترغب في رؤية حالة جميع ملفات الوحدات على نظامك، استخدم systemctl list-unit-files.

  2. بمجرد أن يصبح Docker غير مخفي، يمكنك بدء Docker daemon باستخدام هذا الأمر. Docker daemon هو الخدمة الخلفية التي تدير الصور والحاويات وتعالج طلبات API الخاصة بـ Docker.
    sudo systemctl start docker

    بدء خدمة Docker

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

    حالة خدمة Docker

  4. كما ترى في الصورة أعلاه، يجب أن ترى الآن أن Docker نشط ويعمل.

2. تنظيف “سحب Docker فاشل” وبدء خدمة Docker

في بعض الأحيان، إذا فشل سحب Docker، فقد يترك وراءه ملفات غير مكتملة تمنع Docker daemon من البدء بشكل صحيح. إزالة هذه الملفات المتبقية تمنح Docker بداية جديدة. يساعد إعادة تشغيل خدمة Docker بعد ذلك في حل أي مشكلات قد تسببها الملفات العالقة أو التالفة.

  1. افتح الطرفية وأدخل هذه الأوامر:
    sudo systemctl unmask docker.service
    sudo systemctl unmask docker.socket
    sudo systemctl start docker.service

بدء خدمة Docker

إذا استمر ظهور الخطأ بعد تشغيل هذه الأوامر، فيجب عليك حذف الملفات المتبقية في دليل 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

إعادة تشغيل خدمة Docker

3. بدء خدمة Dockerd (Docker Daemon) مباشرة

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

  1. افتح Terminal واستخدم هذا الأمر لبدء تشغيل Docker daemon مباشرة:
    sudo dockerd

بدء تشغيل Dockerd

4. بدء تشغيل Docker باستخدام أمر Service

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

  1. افتح Terminal الخاص بك وقم بالتشغيل:
    sudo service --status-all
    sudo service docker start

بدء خدمة Docker

5. بدء خدمة Docker باستخدام Snap

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

  1. افتح Terminal وقم بتشغيل هذا الأمر لـ بدء تشغيل Docker:
    sudo snap start docker

    بدء تشغيل Docker

  2. للتحقق مما إذا كان Docker قد بدأ بشكل صحيح باستخدام Snap، استخدم:
    sudo snap services
  3. سيؤدي هذا إلى سرد جميع خدمات Snap قيد التشغيل:
    خدمات Snap
  4. إذا لم يبدأ Docker بعد، فحاول توصيل المكون الإضافي docker:home، والذي لا يتم توصيله تلقائيًا دائمًا. ثم أعد تشغيل Docker.
  5. افتح Terminal وقم بالتنفيذ:
    sudo snap connect docker:home :home
    sudo snap start docker

    بدء تشغيل Docker

6. بدء تشغيل Docker للمستخدمين بدون امتيازات الجذر

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

  1. افتح Terminal وقم بالتشغيل:
    export DOCKER_HOST=tcp://localhost:2375

    تصدير مضيف Docker

7. إعادة تثبيت Docker

في بعض الأحيان، قد تمنع المشكلات المتعلقة بكيفية تثبيت Docker — مثل الملفات التالفة أو الإعدادات الخاطئة — تشغيل Docker daemon بشكل صحيح. تؤدي إعادة تثبيت Docker إلى إعادة كل شيء إلى حالته الافتراضية ويمكن أن تصلح المشكلات الناتجة عن الإعدادات المعطلة أو المتعارضة.

  1. بعد إعادة تثبيت Docker، تأكد من أن الخدمة تعمل باستخدام الأمر التالي:
    sudo service docker start

    سيقوم هذا الأمر بتشغيل Docker وغالبًا ما يصلح المشكلات عندما لا يكون البرنامج نشطًا، خاصة بعد إعادة تشغيل الكمبيوتر أو إذا فشل Docker في التشغيل تلقائيًا.

  2. نظرًا لأن Docker daemon يتحكم في جميع الحاويات والصور، فإن التأكد من تشغيله يعيد الاتصال بين عميل Docker والـ daemon، مما يمكن أن يصلح الأخطاء الناتجة عن توقف الخدمة أو عدم نشاطها.