افحص ملف Dockerfile وفق 55 قاعدة من hadolint: الإصدارات المثبتة ومستخدم root وذاكرة التخزين المؤقت والمزيد
يعمل في متصفحك. لا يُرسل أي شيء تكتبه إلى أي مكان. تم التحقق في 16 أكتوبر 2026.يقرأ مدقق Dockerfile الملف دون بنائه، ويحدد الأسطر الخطرة أو المُهدِرة. يطبّق هذا المدقق 55 قاعدة من قواعد DL في hadolint، مثل DL3008 للحزم المثبّتة عبر apt-get دون تحديد إصدار، وDL3002 للتشغيل بصلاحيات root، ويعطي كل ملاحظة سطرها ومستواها وطريقة إصلاحها. يعمل في متصفحك، دون تثبيت ودون Docker.
تُرجمت هذه الصفحة آليًا من الأصل الإنجليزي. لم يراجع أي شخص هذه الترجمة بعد، لذا فالنسخة الإنجليزية هي التي يُعتمد عليها. اقرأ الأصل الإنجليزي
الصق ملف Dockerfile في المربع، أو افتح الملف، أو انقر على جرّب مثالًا.
اقرأ الملاحظات مرتبة حسب السطر: لكل منها مستوى ورمز hadolint ووصف المشكلة وطريقة إصلاحها.
انقر على ملاحظة للانتقال إلى سطرها، وأصلحه، وشاهد القائمة تتحدّث أثناء الكتابة.
انقر على نسخ التقرير لأخذ الملاحظات نصًّا، لطلب سحب (pull request) أو تذكرة.
قد يُبنى ملف Dockerfile اليوم ويتعطّل الشهر القادم: صورة أساسية دون إصدار مثبّت تتغيّر، وأمر apt-get install يجلب إصدارًا جديدًا، وذاكرة تخزين مؤقت متروكة في طبقة تجعل الصورة أكبر بمئات الميغابايت. يكتشف المدقق ذلك قبل النشر. hadolint هو الأداة المعيارية في خطوط CI؛ وهذه الصفحة تطبّق قواعده الخاصة بملفات Dockerfile في متصفحك.
ما الذي يُفحص. تذكر كل ملاحظة سطرها ورمز hadolint ومستوى وإصلاحًا في سطر واحد. تنقسم القواعد إلى خمس مجموعات:
| المجموعة | أمثلة |
|---|---|
| بناء قابل للتكرار | DL3006 صورة دون وسم، DL3007 latest، DL3008 apt-get، DL3013 pip، DL3016 npm، DL3018 apk |
| صور أصغر | DL3009 قوائم apt، DL3015 recommends، DL3019 ذاكرة apk المؤقتة، DL3042 ذاكرة pip المؤقتة، DL3059 طبقات RUN زائدة |
| الأمان | DL3002 مستخدم root، DL3004 sudo، DL4006 pipefail |
| الصحة | DL3011 نطاق المنافذ، DL3021 وجهة COPY، DL3022 وDL3023 أسماء المراحل، DL3044 ENV، DL3061 الترتيب |
| وضوح القصد | DL3000 WORKDIR، DL3003 cd، DL3020 ADD، DL3025 CMD بصيغة JSON، DL4000 MAINTAINER |
مدى قربه من hadolint. كُتبت القواعد انطلاقًا من الشيفرة المصدرية لـ hadolint 2.12، وتستخدم الاختبارات إجابات برنامج hadolint الحقيقي لأكثر من 80 ملف Dockerfile: الرموز نفسها في الأسطر نفسها، في كل مرة. البناء متعدد المراحل وONBUILD وأسطر المتابعة وتوجيه escape وتعليقات # hadolint ignore= المضمّنة تتصرف كما في hadolint. لا تشمل الصفحة تحذيرات SC من ShellCheck حول شيفرة الصدفة داخل أسطر RUN.
إيقاف قاعدة. ضع # hadolint ignore=DL3008 في السطر الذي يسبق التعليمة لتخطّي تلك القاعدة هناك، أو # hadolint global ignore=DL3059 في أي مكان لتخطّيها في الملف كله. يذكر الملخّص عدد الملاحظات التي أُوقفت.
كل شيء يعمل في متصفحك: ملف Dockerfile الذي تلصقه أو تفتحه لا يُرفع أبدًا.
يشير DL3008 إلى أن سطر apt-get install يذكر حزمًا دون إصدارات، فقد يثبّت كل بناء شيئًا مختلفًا. اكتب الحزمة=الإصدار، مثل curl=7.88.1-10+deb12u5، واعرف الإصدار الحالي بالأمر apt-cache policy curl داخل الصورة الأساسية. تثبيت الإصدارات يجعل الصورة قابلة للتكرار؛ حدّثها عن قصد لا مصادفة.
الحاوية التي تعمل بصلاحيات root تملك صلاحيات root داخلها، فيستطيع مهاجم يخترق التطبيق فعل المزيد، وقد يغيّر خطأ في وحدة تخزين مركّبة ملفات المضيف. أنشئ مستخدمًا في RUN، مثل useradd app، وأنهِ المرحلة بـ USER app. يمكن لخطوات البناء التي تسبق ذلك أن تعمل بصلاحيات root.
كل RUN ينشئ طبقة، والملف المحذوف في طبقة لاحقة يظل يشغل مساحة في الطبقة السابقة. ينزّل apt-get update قوائم حزم بعشرات الميغابايت، لذا احذفها في RUN نفسه بـ && rm -rf /var/lib/apt/lists/*. حذفها في RUN منفصل لا يوفّر شيئًا.
اكتب تعليقًا مباشرة فوق التعليمة: # hadolint ignore=DL3008، أو عدة رموز مفصولة بفواصل. لإيقاف قاعدة في الملف كله، اكتب # hadolint global ignore=DL3059 في أي مكان. يعمل الأسلوبان في hadolint نفسه وفي هذه الصفحة، ويعدّ الملخّص ما أُوقف.
بالنسبة لقواعد Dockerfile، نعم: رموز DL الـ 55 ومستوياتها وشروطها تتبع hadolint 2.12، وتقارن الاختبارات النتائج ببرنامج hadolint الحقيقي على أكثر من 80 ملفًا. لا تشمل الصفحة تحذيرات SC من ShellCheck حول شيفرة الصدفة داخل أسطر RUN، ولا القواعد التي تحتاج إلى ملف إعدادات، مثل السجلات المسموح بها.
استخدم COPY للملفات والمجلدات. يقوم ADD أيضًا بتنزيل عناوين URL وفك ضغط أرشيفات tar المحلية، وهذا مفيد حين تريد ذلك تحديدًا ومفاجئ حين لا تريده. يحدد hadolint استخدام ADD لملف عادي على أنه DL3020، ويحدد COPY يليه tar -x للأرشيف نفسه على أنه DL3010، إذ يقوم ADD بذلك في خطوة واحدة.
تتغير المعدلات والقواعد؛ راجع المصدر قبل الاعتماد على أي رقم.
هل ما زلت عالقًا؟ اسأل عن مدقق Dockerfile ويمكن لأي شخص يعرف الإجابة أن يجيب. لا حاجة إلى حساب.