تشغيل التطبيقات باستخدام Docker كروتين يومي يمكن أن يتحول إلى كابوس عند مواجهتك لخطأ مثل إذن Docker مرفوض أثناء المحاولة. ولكن لا تقلق، سيساعدك هذا المقال في العودة إلى التشغيل في وقت قصير.
في هذا البرنامج التعليمي، ستتعلم العديد من الطرق لحل رسالة خطأ إذن Docker المرفوضة.
المتطلبات المسبقة
يشمل هذا البرنامج التعليمي عروضًا توضيحية عملية. لمتابعة، تأكد من وجود ما يلي:
- تعمل العروض في هذا البرنامج التعليمي على Ubuntu 20.04، ولكن توزيعات Linux الأخرى ستعمل أيضًا.
- محرك Docker، مع تشغيل البرنامج التعليمي بالإصدار 20.10.8، بناء 3967b7d.
تشغيل أوامر Docker بامتياز
يمكن أن يؤدي العديد من العوامل إلى حدوث خطأ إذن مرفوض أثناء الاتصال بـ Docker. إحدى تلك العوامل هي أنه قد تكون تقوم بتشغيل أوامر Docker دون إضافة أمر sudo
. أمر sudo
هو الذي يمنحك حقوق الإدارة المرتفعة إلى جانب الامتيازات الأمانية عند تشغيل الأوامر.
أدناه، يمكنك رؤية خطأ إذن مرفوض المريع أثناء محاولة تشغيل أمر docker
.

قم بتشغيل الطرفية الخاصة بك وأضف `sudo` قبل الأمر `docker` أدناه لتشغيل صورة Docker `hello-world`. نظرًا لأنك تقوم بتشغيل أمر مرتفع، ستحتاج إلى إدخال كلمة المرور الخاصة بك للمتابعة.
سترى نتيجة مماثلة لتلك المُعروضة أدناه تشير إلى أن Docker مثبت بشكل صحيح.

إعادة تشغيل محرك Docker
إذا لم يحل تشغيل أوامر Docker المُرتفعة خطأ “الإذن مرفوض”، فتحقق من تشغيل محرك Docker الخاص بك. بالمثل، يؤدي إيقاف تشغيل محرك Docker إلى إثارة خطأ “الإذن مرفوض” مثل تشغيل أمر `docker` دون الأمر `sudo`. كيف تُصلح الخطأ؟ من خلال إعادة تشغيل محرك Docker الخاص بك.
قم بتشغيل الأمر systemctl
أدناه لتأكيد حالة محرك Docker (`status docker`) وإذا كان يعمل.
أدناه، يمكنك معرفة تشغيل محرك Docker من الحالة المُعادة التي تظهر `active (running)`.

إذا لم يكن محرك Docker نشطًا، قم بتشغيل الأمر `systemctl` أدناه لبدء محرك Docker (`start docker`).
الآن، قم بتشغيل أمر الـ hello-world Docker كما فعلت في قسم “تشغيل أوامر Docker بصلاحيات مرتفعة” للتحقق من أن الخطأ قد تم حله.
إضافة حساب المستخدم إلى مجموعة بصلاحيات الوصول للمستخدم غير الجذري
لقد قمت بتأكيد أن محرك Docker الخاص بك يعمل، ولكن لا تزال تواجه خطأ “permission denied” في Docker؟ إذا كان الأمر كذلك، فيجب عليك إضافة حساب المستخدم الخاص بك إلى مجموعة تمتلك صلاحيات وصول غير جذرية. لماذا؟ لأن أي أمر Docker تقوم بتشغيله على جهاز Linux غير موجود في مجموعة المستخدم يُثير خطأ “permission denied”.
- قم بتشغيل أمر
groupadd
أدناه لإنشاء مجموعة جديدة تسمىdocker
. أدخل كلمة المرور الخاصة بك لمتابعة تشغيل الأمر.
إذا كانت مجموعة docker موجودة في مجموعة المستخدم، سترى مخرجات مشابهة لتلك المعروضة أدناه.

2. بعد ذلك، قم بتشغيل أمر usermod
أدناه حيث تُخبر خيارات -aG
الأمر بإضافة حساب المستخدم الخاص بك (programmer
) إلى مجموعة (docker
). يؤدي هذا الأمر إلى منح حساب المستخدم الخاص بك وصولًا غير جذري.
3. قم بتشغيل أمر newgrp
أدناه لتغيير معرّف المجموعة الحقيقية الحالية إلى مجموعة docker
.
قم بتشغيل هذا الأمر في كل مرة ترغب في تشغيل Docker كمستخدم غير جذري.
4. أخيرًا ، قم بإعادة تشغيل صورة hello-world Docker للتحقق مما إذا كنت لا ترى الخطأ بعد الآن. إذا كنت لا تزال تحصل على خطأ في هذه المرحلة ، فقم بالنظر في منح المزيد من الوصول إلى ملف docker.sock. ملف docker.sock هو مأخذ UNIX ، وهو وسيلة لتبادل معلومات العملية بين المستخدم والنظام ، الذي يستمع إليه ديمون Docker كنقطة دخول لواجهة برمجة التطبيقات Docker.
قم بتشغيل أمر chmod
أدناه لمنح جميع المستخدمين صلاحية القراءة/الكتابة (666
) لملف /var/run/docker.sock
. الآن قم بتشغيل صورة hello-world Docker مرة أخرى لرؤية ما إذا تم حل الخطأ.
تحرير ملف وحدة خدمة Docker
إذا كان تشغيل Docker كمستخدم غير جذر ليس كافيًا لإصلاح الخطأ ، جرب تحرير ملف وحدة خدمة Docker SystemD ، وهو نظام التحكم في الخدمة. يحتوي ملف الخدمة Docker على معلمات حساسة قد تغير سلوك ديمون Docker. يمكنك تعديل سلوك الوحدة Docker الافتراضي عن طريق إضافة أمر إضافي لتغيير سلوك الخدمة الافتراضي.
1. قم بتشغيل الأمر أدناه لفتح ملف وحدة خدمة Docker في محرر النص المفضل لديك. في هذا المثال ، يتم فتح ملف الخدمة Docker في محرر النانو للنص.
2. تحديد المنطقة التي تحتوي على رأس [الخدمة] داخل ملف وحدة خدمة Docker، كما هو موضح أدناه. قم بنسخ/لصق الأوامر أدناه إلى ملف وحدة خدمة Docker واحفظ التغييرات.
أدناه، تعيّن الأمر SupplementaryGroups
المجموعات اليونكس الإضافية إلى حيث يتم تنفيذ العمليات. في الوقت نفسه، يقوم الأمر ExecStartPost
بتنظيف العمليات التي يتم تنفيذها حتى لو فشلت الخدمة في بدء التشغيل بشكل صحيح.

3. الآن، قم بتشغيل الأوامر أدناه لإعادة تشغيل وتمكين خدمة Docker. بذلك، يتيح لك بدء تشغيل خدمة Docker من جديد لتجنب الحصول على أخطاء عند تشغيل أوامر Docker.
4. في النهاية، قم بتشغيل صورة Docker hello-world
مرة أخرى وتحقق مما إذا كنت لا تزال تحصل على خطأ الإذن المرفوض.
تشغيل Docker في وضع الامتياز
وأخيرًا، في قائمة إصلاح خطأ رفض إذن Docker، هناك تشغيل Docker في وضع الامتياز. بفعل ذلك، يمنح وضع الامتياز لحاوية Docker الوصول الكامل إلى النظام.
تشغيل Docker في وضع الامتياز محفوف بالمخاطر وعرضة للهجمات من قبل القراصنة. لذا كن حذرًا وقم بتشغيل Docker في وضع الامتياز فقط عندما تعرف بالضبط ما تفعله.
1. قم بتشغيل الأمر أدناه لعرض جميع حاويات Docker في النظام الخاص بك، واحصل على معرف الحاوية التي تريد تشغيلها.

2. فيما بعد، قم بتشغيل الأمر docker inspect
أدناه للتحقق مما إذا كانت الحاوية التي تريد تشغيلها قد تم تشغيلها بالفعل في وضع متطور (--format='{{.HostConfig.Privileged}}'
). قم بتبديل CONTAINER_ID
أدناه بمعرف الحاوية الفعلي الذي لاحظته في الخطوة الأولى.
إذا كانت الحاوية في وضع متطور، سيعيد الأمر قيمة true إلى واجهة الأوامر. ولكن إذا كان الأمر يعيد قيمة كاذبة، كما هو موضح أدناه، فانتقل إلى الخطوة التالية.

3. أخيرًا، قم بتشغيل الأمر docker
أدناه لتشغيل حاوية Docker بوضع متطور (--privileged hello-world
).
الختام
طوال هذا البرنامج التعليمي، لقد تعلمت العديد من الطرق لحل خطأ تصريح Docker permission denied، بدءًا من تشغيل الأوامر المرتفعة إلى تشغيل Docker في وضع متطور.
الآن تعرف كيفية التخلص من الخطأ عند بناء تطبيقات Docker؛ ربما ترغب أيضًا في الحفاظ على نظافة صور Docker الخاصة بك في جميع الأوقات؟
Source:
https://adamtheautomator.com/docker-permission-denied/