
linter dockerfile أكثر ذكاءً يساعدك على بناء صور Docker أفضل الممارسات. يقوم The Linter بتخزين Dockerfile في AST ويقوم بإجراء قواعد أعلى AST. إنه يقف على أكتاف Shellcheck للترتب إلى رمز Bash داخل تعليمات RUN .
تحقق من الإصدار عبر الإنترنت على hadolint.github.io/hadolint 
يمكنك تشغيل hadolint محليًا لتربط Dockerfile.
hadolint < Dockerfile >
hadolint --ignore DL3003 --ignore DL3006 < Dockerfile > # exclude specific rules
hadolint --trusted-registry my-company.com:500 < Dockerfile > # Warn when using untrusted FROM images يأتي Docker إلى الإنقاذ ، مما يوفر طريقة سهلة كيفية تشغيل hadolint على معظم المنصات. ما عليك سوى أنبوب Dockerfile إلى docker run :
docker run --rm -i hadolint/hadolint < Dockerfile
# OR
docker run --rm -i ghcr.io/hadolint/hadolint < Dockerfileأو باستخدام Podman:
podman run --rm -i docker.io/hadolint/hadolint < Dockerfile
# OR
podman run --rm -i ghcr.io/hadolint/hadolint < Dockerfileأو استخدام Windows PowerShell:
cat .Dockerfile | docker run -- rm - i hadolint / hadolint يمكنك تنزيل الثنائيات المسبقة لـ OSX و Windows و Linux من أحدث صفحة إصدار. ومع ذلك ، إذا لم ينجح هذا من أجلك ، فالرجاء العودة إلى الحاوية (Docker) أو تثبيت brew أو المصدر.
على OSX ، يمكنك استخدام Brew لتثبيت hadolint .
brew install hadolint على Windows ، يمكنك استخدام Scoop لتثبيت hadolint .
scoop install hadolint على التوزيعات التي تم تثبيتها nix ، يمكنك استخدام حزمة hadolint لتشغيل الأصداف المخصصة أو تثبيت hadolint بشكل دائم في بيئتك.
كما ذكرنا سابقًا ، تتوفر hadolint كصورة حاوية:
docker pull hadolint/hadolint
# OR
docker pull ghcr.io/hadolint/hadolintإذا كنت بحاجة إلى حاوية مع وصول شل ، فاستخدم متغيرات Debian أو Alpine:
docker pull hadolint/hadolint:latest-debian
# OR
docker pull hadolint/hadolint:latest-alpine
# OR
docker pull ghcr.io/hadolint/hadolint:latest-debian
# OR
docker pull ghcr.io/hadolint/hadolint:latest-alpine يمكنك أيضا بناء hadolint محليا. أنت بحاجة إلى Haskell وأداة بناء cabal لبناء الثنائي.
git clone https://github.com/hadolint/hadolint
&& cd hadolint
&& cabal configure
&& cabal build
&& cabal installإذا كنت تريد استخدام Extension VS Code HadoLint في حاوية ، فيمكنك استخدام البرنامج النصي المربع التالي:
#! /bin/bash
dockerfile= " $1 "
shift
docker run --rm -i hadolint/hadolint hadolint " $@ " - < " $dockerfile " hadolint --help hadolint - Dockerfile Linter written in Haskell
Usage: hadolint [-v|--version] [-c|--config FILENAME] [DOCKERFILE...]
[--file-path-in-report FILEPATHINREPORT] [--no-fail]
[--no-color] [-V|--verbose] [-f|--format ARG] [--error RULECODE]
[--warning RULECODE] [--info RULECODE] [--style RULECODE]
[--ignore RULECODE]
[--trusted-registry REGISTRY (e.g. docker.io)]
[--require-label LABELSCHEMA (e.g. maintainer:text)]
[--strict-labels] [--disable-ignore-pragma]
[-t|--failure-threshold THRESHOLD]
Lint Dockerfile for errors and best practices
Available options:
-h,--help Show this help text
-v,--version Show version
-c,--config FILENAME Path to the configuration file
--file-path-in-report FILEPATHINREPORT
The file path referenced in the generated report.
This only applies for the 'checkstyle' format and is
useful when running Hadolint with Docker to set the
correct file path.
--no-fail Don't exit with a failure status code when any rule
is violated
--no-color Don't colorize output
-V,--verbose Enables verbose logging of hadolint's output to
stderr
-f,--format ARG The output format for the results [tty | json |
checkstyle | codeclimate | gitlab_codeclimate | gnu |
codacy | sonarqube | sarif] (default: tty)
--error RULECODE Make the rule `RULECODE` have the level `error`
--warning RULECODE Make the rule `RULECODE` have the level `warning`
--info RULECODE Make the rule `RULECODE` have the level `info`
--style RULECODE Make the rule `RULECODE` have the level `style`
--ignore RULECODE A rule to ignore. If present, the ignore list in the
config file is ignored
--trusted-registry REGISTRY (e.g. docker.io)
A docker registry to allow to appear in FROM
instructions
--require-label LABELSCHEMA (e.g. maintainer:text)
The option --require-label=label:format makes
Hadolint check that the label `label` conforms to
format requirement `format`
--strict-labels Do not permit labels other than specified in
`label-schema`
--disable-ignore-pragma Disable inline ignore pragmas `# hadolint
ignore=DLxxxx`
-t,--failure-threshold THRESHOLD
Exit with failure code only when rules with a
severity equal to or above THRESHOLD are violated.
Accepted values: [error | warning | info | style |
ignore | none] (default: info)
يمكن استخدام ملفات التكوين على مستوى العالم أو لكل مشروع. يبحث HadoLint عن ملفات التكوين في المواقع التالية أو معادلات محددة من النظام الأساسي في هذا الترتيب وتستخدم أول واحد حصريًا:
$PWD/.hadolint.yaml$XDG_CONFIG_HOME/hadolint.yaml$HOME/.config/hadolint.yaml$HOME/.hadolint/hadolint.yaml or $HOME/hadolint/config.yaml$HOME/.hadolint.yaml في Windows ، يتم استخدام متغير البيئة %LOCALAPPDATA% بدلاً من XDG_CONFIG_HOME . يمكن أن تحتوي ملفات التكوين إما على امتدادات yaml أو yml .
مخطط ملف تكوين yaml الكامل hadolint
failure-threshold : string # name of threshold level (error | warning | info | style | ignore | none)
format : string # Output format (tty | json | checkstyle | codeclimate | gitlab_codeclimate | gnu | codacy)
ignored : [string] # list of rules
label-schema : # See Linting Labels below for specific label-schema details
author : string # Your name
contact : string # email address
created : timestamp # rfc3339 datetime
version : string # semver
documentation : string # url
git-revision : string # hash
license : string # spdx
no-color : boolean # true | false
no-fail : boolean # true | false
override :
error : [string] # list of rules
warning : [string] # list of rules
info : [string] # list of rules
style : [string] # list of rules
strict-labels : boolean # true | false
disable-ignore-pragma : boolean # true | false
trustedRegistries : string | [string] # registry or list of registries يدعم hadolint تحديد القواعد التي تم تجاهلها باستخدام ملف التكوين. يجب أن يكون ملف التكوين بتنسيق yaml . هذا ملف تكوين واحد صالح كمثال:
ignored :
- DL3000
- SC1010 بالإضافة إلى ذلك ، يمكن hadolint أن تحذرك عندما يتم استخدام صور من مستودعات غير موثوق بها في DockerFiles ، يمكنك إلحاق مفاتيح trustedRegistries على ملف التكوين ، كما هو موضح أدناه:
ignored :
- DL3000
- SC1010
trustedRegistries :
- docker.io
- my-company.com:5000
- " *.gcr.io "إذا كنت ترغب في تجاوز شدة قواعد محددة ، فيمكنك القيام بذلك أيضًا:
override :
error :
- DL3001
- DL3002
warning :
- DL3042
- DL3033
info :
- DL3032
style :
- DL3015 خروج failure-threshold مع رمز الفشل فقط عندما يتم انتهاك قواعد ذات شدة أعلى من العتبة (متوفرة في v2.6.0+)
failure-threshold : info
override :
warning :
- DL3042
- DL3033
info :
- DL3032 بالإضافة إلى ذلك ، يمكنك تمرير ملف تكوين مخصص في سطر الأوامر مع خيار --config
hadolint --config /path/to/config.yaml Dockerfileلتمرير ملف تكوين مخصص (باستخدام المسار النسبي أو المطلق) إلى حاوية ، استخدم الأمر التالي:
docker run --rm -i -v /your/path/to/hadolint.yaml:/.config/hadolint.yaml hadolint/hadolint < Dockerfile
# OR
docker run --rm -i -v /your/path/to/hadolint.yaml:/.config/hadolint.yaml ghcr.io/hadolint/hadolint < Dockerfileبالإضافة إلى ملفات التكوين ، يمكن تكوين HadoLint مع متغيرات البيئة.
NO_COLOR=1 # Set or unset. See https://no-color.org
HADOLINT_NOFAIL=1 # Truthy value e.g. 1, true or yes
HADOLINT_VERBOSE=1 # Truthy value e.g. 1, true or yes
HADOLINT_FORMAT=json # Output format (tty | json | checkstyle | codeclimate | gitlab_codeclimate | gnu | codacy | sarif )
HADOLINT_FAILURE_THRESHOLD=info # threshold level (error | warning | info | style | ignore | none)
HADOLINT_OVERRIDE_ERROR=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_WARNING=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_INFO=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_STYLE=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_IGNORE=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_STRICT_LABELS=1 # Truthy value e.g. 1, true or yes
HADOLINT_DISABLE_IGNORE_PRAGMA=1 # Truthy value e.g. 1, true or yes
HADOLINT_TRUSTED_REGISTRIES=docker.io # comma separated list of registry urls
HADOLINT_REQUIRE_LABELS=maintainer:text # comma separated list of label schema items عند استخدام الصور الأساسية مع قذائف غير POSIX كإعداد افتراضي (على سبيل المثال الصور المستندة إلى Windows) ، يمكن لـ Pragma hadolint shell تحديد ما تستخدمه الصورة الأساسية ، بحيث يمكن لـ Hadolint تلقائيًا تجاهل جميع القواعد الخاصة بالقذيفة.
FROM mcr.microsoft.com/windows/servercore:ltsc2022
# hadolint shell=powershell
RUN Get-Process notepad | Stop-Process من الممكن أيضًا تجاهل القواعد عن طريق إضافة تعليق خاص مباشرة فوق بيان Dockerfile الذي تريد استثناء من أجله. تبدو هذه التعليقات وكأن # hadolint ignore=DL3001,SC1081 . على سبيل المثال:
# hadolint ignore=DL3006
FROM ubuntu
# hadolint ignore=DL3003,SC1035
RUN cd /tmp && echo "hello!"ينطبق التعليق "المتجاهل" فقط على البيان الذي يتبعه.
يمكن أيضًا تجاهل القواعد على أساس لكل ملف باستخدام Pragma العالمي. إنه يعمل تمامًا كما يتجاهل Inline ، إلا أنه ينطبق على الملف بأكمله بدلاً من السطر التالي فقط.
# hadolint global ignore=DL3003,DL3006,SC1035
FROM ubuntu
RUN cd /tmp && echo "foo" HadoLint قادر على التحقق مما إذا كانت ملصقات محددة موجودة وتوافق مع مخطط الملصقات المحددة مسبقًا. أولاً ، يجب تعريف مخطط التسمية إما عبر سطر الأوامر:
hadolint --require-label author:text --require-label version:semver Dockerfileأو عبر ملف التكوين:
label-schema :
author : text
contact : email
created : rfc3339
version : semver
documentation : url
git-revision : hash
license : spdx يمكن أن تكون قيمة الملصق إما من text أو url أو semver أو hash أو rfc3339 :
| مخطط | وصف |
|---|---|
| نص | أي شئ |
| RFC3339 | وقت ، منسق وفقًا لـ RFC 3339 |
| Semver | نسخة دلالية |
| عنوان URL | URI كما هو موضح في RFC 3986 |
| التجزئة | إما تجزئة قصيرة أو طويلة |
| SPDX | معرف ترخيص SPDX |
| بريد إلكتروني | عنوان بريد إلكتروني يتوافق مع RFC 5322 |
بشكل افتراضي ، يتجاهل HadoLint أي تسمية غير محددة في مخطط الملصقات. للتحذير من مثل هذه الملصقات الإضافية ، قم بتشغيل ملصقات صارمة ، باستخدام سطر الأوامر:
hadolint --strict-labels --require-label version:semver Dockerfileأو ملف التكوين:
strict-labels : true عندما يتم تمكين الملصقات الصارمة ، ولكن لا يتم تحديد مخطط الملصقات ، سيحذر hadolint في حالة وجود أي علامة.
إنه نمط شائع أن تملأ قيمة الملصق ليس بشكل ثابت ، بل بشكل ديناميكي في وقت البناء باستخدام متغير:
FROM debian:buster
ARG VERSION= "du-jour"
LABEL version= "${VERSION}" للسماح بذلك ، يجب أن يحدد مخطط التسمية text كقيمة لتلك التسمية:
label-schema :
version : text للحصول على معظم hadolint ، من المفيد دمجه كتسجيل في CI الخاص بك أو في المحرر الخاص بك ، أو كخطاف مسبقًا ، لتربط Dockerfile أثناء كتابتك. انظر مستندات التكامل لدينا.
قائمة غير مكتملة من القواعد المنفذة. انقر على رمز الخطأ للحصول على معلومات أكثر تفصيلاً.
القواعد مع البادئة DL هي من hadolint . إلقاء نظرة على Rules.hs للعثور على تنفيذ القواعد.
القواعد التي تحتوي على بادئة SC هي من Shellcheck (يتم سرد القواعد الأكثر شيوعًا فقط ، وهناك العشرات أكثر).
يرجى إنشاء مشكلة إذا كان لديك فكرة عن قاعدة جيدة.
| قاعدة | الشدة الافتراضية | وصف |
|---|---|---|
| DL1001 | يتجاهل | يرجى الامتناع عن استخدام inline تجاهل pragmas # hadolint ignore=DLxxxx . |
| DL3000 | خطأ | استخدم workdir المطلقة. |
| DL3001 | معلومات | بالنسبة لبعض أوامر Bash ، لا معنى لها في تشغيلها في حاوية Docker مثل SSH ، VIM ، الإغلاق ، الخدمة ، PS ، مجاني ، أعلى ، قتل ، جبل ، ifconfig. |
| DL3002 | تحذير | لا ينبغي أن يكون المستخدم الأخير جذرًا. |
| DL3003 | تحذير | استخدم WorkDir للتبديل إلى دليل. |
| DL3004 | خطأ | لا تستخدم sudo لأنه يؤدي إلى سلوك لا يمكن التنبؤ به. استخدم أداة مثل GOSU لفرض الجذر. |
| DL3006 | تحذير | دائما وضع علامة على إصدار الصورة بشكل صريح. |
| DL3007 | تحذير | استخدام الأحدث عرضة للأخطاء إذا كانت الصورة سيتم تحديثها على الإطلاق. قم بتثبيت الإصدار بشكل صريح إلى علامة الإصدار. |
| DL3008 | تحذير | PIN إصدارات في apt-get install . |
| DL3009 | معلومات | احذف قوائم APT-GET بعد تثبيت شيء ما. |
| DL3010 | معلومات | استخدم ADD لاستخراج المحفوظات في صورة. |
| DL3011 | خطأ | تتراوح منافذ UNIX صالحة من 0 إلى 65535. |
| DL3012 | خطأ | تعليمات HEALTHCHECK متعددة. |
| DL3013 | تحذير | PIN إصدارات في PIP. |
| DL3014 | تحذير | استخدم مفتاح -y . |
| DL3015 | معلومات | تجنب الحزم الإضافية عن طريق تحديد --no-install-recommends . |
| DL3016 | تحذير | PIN إصدارات في npm . |
| DL3018 | تحذير | إصدارات PIN في apk add . بدلاً من apk add <package> استخدم apk add <package>=<version> . |
| DL3019 | معلومات | استخدم مفتاح --no-cache لتجنب الحاجة إلى استخدام --update /var/cache/apk/* عند الانتهاء من تثبيت الحزم. |
| DL3020 | خطأ | استخدم COPY بدلاً من ADD الملفات والمجلدات. |
| DL3021 | خطأ | تتطلب COPY بأكثر من وسيطين أن تنتهي الوسيطة الأخيرة مع / |
| DL3022 | تحذير | يجب أن تشير COPY --from الإشارة إلى اسم مستعار مسبقًا من الاسم FROM |
| DL3023 | خطأ | COPY --from لا يمكن الرجوع إلى الاسم FROM |
| DL3024 | خطأ | FROM الأسماء المستعارة (أسماء المرحلة) يجب أن تكون فريدة من نوعها |
| DL3025 | تحذير | استخدم الوسيطات JSON تدوين وسيطات CMD و Entploint |
| DL3026 | خطأ | استخدم فقط السجل المسموح به في FROM image |
| DL3027 | تحذير | لا تستخدم apt لأنه من المفترض أن تكون أداة مستخدم نهائي ، استخدم apt-get أو apt-cache بدلاً من ذلك |
| DL3028 | تحذير | PIN إصدارات في تثبيت GEM. بدلاً من gem install <gem> استخدم gem install <gem>:<version> |
| DL3029 | تحذير | لا تستخدم -العلم platform مع من. |
| DL3030 | تحذير | استخدم مفتاح -y لتجنب الإدخال اليدوي yum install -y <package> |
| DL3032 | تحذير | yum clean all مفقود بعد أمر yum. |
| DL3033 | تحذير | حدد الإصدار مع yum install -y <package>-<version> |
| DL3034 | تحذير | مفتاح غير تفاعلي مفقود من أمر zypper : zypper install -y |
| DL3035 | تحذير | لا تستخدم zypper dist-upgrade . |
| DL3036 | تحذير | zypper clean مفقود بعد استخدام Zypper. |
| DL3037 | تحذير | حدد الإصدار مع zypper install -y <package>[=]<version> . |
| DL3038 | تحذير | استخدم مفتاح -y لتجنب تثبيت dnf install -y <package> |
| DL3040 | تحذير | dnf clean all مفقود بعد أمر DNF. |
| DL3041 | تحذير | حدد الإصدار مع dnf install -y <package>-<version> |
| DL3042 | تحذير | تجنب دليل ذاكرة التخزين المؤقت مع pip install --no-cache-dir <package> . |
| DL3043 | خطأ | ONBUILD ، FROM أو MAINTAINER الناتج من داخل تعليمات ONBUILD . |
| DL3044 | خطأ | لا تشير إلى متغير البيئة ضمن نفس عبارة ENV حيث يتم تعريفه. |
| DL3045 | تحذير | COPY إلى وجهة نسبية دون مجموعة WORKDIR . |
| DL3046 | تحذير | useradd بدون flag -l و uid العالي سوف يؤدي إلى صورة كبيرة بشكل مفرط. |
| DL3047 | معلومات | wget بدون علامة --progress يؤدي Progress إلى سجلات الإنشاء المفرطة عند تنزيل ملفات أكبر. |
| DL3048 | أسلوب | مفتاح التسمية غير صالح |
| DL3049 | معلومات | Label <label> مفقود. |
| DL3050 | معلومات | تسمية (علامات) غير ضرورية. |
| DL3051 | تحذير | Label <label> فارغ. |
| DL3052 | تحذير | التسمية <label> ليست عنوان URL صالحًا. |
| DL3053 | تحذير | التسمية <label> ليست تنسيقًا للوقت الصحيح - يجب أن تتوافق مع RFC3339. |
| DL3054 | تحذير | التسمية <label> ليست معرف ترخيص SPDX صالح. |
| DL3055 | تحذير | التسمية <label> ليست تجزئة GIT صالحة. |
| DL3056 | تحذير | Label <label> لا تتوافق مع الإصدار الدلالي. |
| DL3057 | يتجاهل | تعليمات HEALTHCHECK مفقودة. |
| DL3058 | تحذير | التسمية <label> ليست تنسيق بريد إلكتروني صالح - يجب أن تتوافق مع RFC5322. |
| DL3059 | معلومات | تعليمات RUN متعددة متتالية. النظر في التوحيد. |
| DL3060 | معلومات | yarn cache clean مفقود بعد تشغيل yarn install . |
| DL3061 | خطأ | أمر تعليمي غير صالح. يجب أن تبدأ Dockerfile من FROM ARG أو التعليق. |
| DL4000 | خطأ | يتم إهمال MAINTAINER . |
| DL4001 | تحذير | إما استخدام wget أو حليقة ولكن ليس كلاهما. |
| DL4003 | تحذير | تم العثور على تعليمات متعددة CMD . |
| DL4004 | خطأ | تم العثور على تعليمات ENTRYPOINT متعددة. |
| DL4005 | تحذير | استخدم SHELL لتغيير القشرة الافتراضية. |
| DL4006 | تحذير | اضبط خيار SHELL -o pipefail قبل RUN مع أنبوب فيه |
| SC1000 | $ لا يستخدم خصيصا وبالتالي يجب أن هرب. | |
| SC1001 | سيكون هذا c 'c' منتظمًا في هذا السياق. | |
| SC1007 | قم بإزالة المساحة بعد = إذا كانت تحاول تعيين قيمة (أو لسلسلة فارغة ، استخدم var='' ... ). | |
| SC1010 | استخدم Semicolon أو Linefeed قبل done (أو اقتباس لجعله حرفيًا). | |
| SC1018 | هذا هو مساحة غير متجانسة. حذفه وترويجه كمساحة. | |
| SC1035 | تحتاج إلى مساحة هنا | |
| SC1045 | إنه ليس foo &; bar ، فقط foo & bar . | |
| SC1065 | هل تحاول إعلان المعلمات؟ لا. استخدم () والرجوع إلى المعاملات بمثابة $1 ، $2 وما إلى ذلك. | |
| SC1066 | لا تستخدم $ على الجانب الأيسر من المهام. | |
| SC1068 | لا تضع مسافات حول = في المهام. | |
| SC1077 | لتوسيع الأوامر ، يجب أن يبقى القراد مائلًا (`vs ´). | |
| SC1078 | هل نسيت إغلاق هذه السلسلة المزدوجة؟ | |
| SC1079 | هذا في الواقع اقتباس نهائي ، ولكن بسبب char التالي ، يبدو مشبوهة. | |
| SC1081 | البرامج النصية حساسة للحالة. استخدم if ، لا If . | |
| SC1083 | هذا {/} حرفي. تحقق من التعبير (مفقود ;/n ؟) أو اقتبس منه. | |
| SC1086 | لا تستخدم $ على اسم Iterator في الحلقات. | |
| SC1087 | الأقواس مطلوبة عند توسيع المصفوفات ، كما في ${array[idx]} . | |
| SC1095 | تحتاج إلى مساحة أو خط خط بين اسم الوظيفة والجسم. | |
| SC1097 | غير متوقع == . للواجب ، استخدم = . للمقارنة ، استخدم [ .. ] أو [[ .. ]] . | |
| SC1098 | QUOTE/ESCER أحرف خاصة عند استخدام eval ، على سبيل المثال eval "a=(b)" . | |
| SC1099 | تحتاج إلى مساحة قبل # . | |
| SC2002 | قطة عديمة الفائدة. النظر في cmd < file | .. أو cmd file | .. بدلاً من. | |
| SC2015 | لاحظ أن A && B || C ليس إذا كان else. قد يعمل C عندما يكون A صحيحًا. | |
| SC2026 | هذه الكلمة خارج الاقتباسات. هل تنوي "العش" "اقتباسات واحدة" "بدلاً من ذلك"؟ | |
| SC2028 | echo لن يوسع تسلسل الهروب. النظر في printf . | |
| SC2035 | استخدم ./*glob* أو -- *glob* حتى لا تصبح الأسماء ذات الشرطات خيارات. | |
| SC2039 | في Posix SH ، شيء غير محدد. | |
| SC2046 | اقتبس هذا لمنع تقسيم الكلمات | |
| SC2086 | اقتباس مزدوج لمنع غرب الكرات وتقسيم الكلمات. | |
| SC2140 | الكلمة في النموذج "A"B"C" (B مشار إليها). هل تقصد "ABC" أو "A"B"C" ؟ | |
| SC2154 | تتم الرجوع إلى VAR ولكن لم يتم تعيينه. | |
| SC2155 | أعلن وتعيين بشكل منفصل لتجنب إخفاء قيم الإرجاع. | |
| SC2164 | استخدم cd ... || exit في حالة فشل cd مضغوط. |
إذا كنت من ذوي الخبرة ، فسنكون ممتنين للغاية إذا كنت ستمزيق الكود لدينا في مراجعة.
للتجميع ، ستحتاج إلى بيئة هاسكل الأخيرة cabal-install .
مستودع استنساخ
git clone --recursive [email protected]:hadolint/hadolint.gitتثبيت التبعيات وتجميع مصدر
cabal configure
cabal build(اختياري) تثبيت HadoLint على نظامك
cabal installأسهل طريقة لتجربة المحلل هي استخدام REPL.
# start the repl
cabal repl
# overload strings to be able to use Text
:set -XOverloadedStrings
# import parser library
import Language.Docker
# parse instruction and look at AST representation
parseText " FROM debian:jessie "تجميع مع اختبارات الوحدة وتشغيلها:
cabal configure --enable-tests
cabal build --enable-tests
cabal testتشغيل اختبارات التكامل:
./integration_test.sh تم وصف بناء جملة Dockerfile بالكامل في مرجع Dockerfile. ما عليك سوى إلقاء نظرة على Syntax.hs في مشروع language-docker لمشاهدة تعريف AST.
يستخدم Hadolint العديد من المكتبات للقيام بالعمل القذر. على وجه الخصوص ، يتم استخدام Docker Language لتحليل Dockerfiles وإنتاج AST الذي يمكن تحليله بعد ذلك. لبناء HadoLint مقابل إصدار مخصص من هذه المكتبات ، قم بما يلي. يستخدم هذا المثال Docker Language ، لكنه سيعمل مع أي مكتبة أخرى أيضًا.
/home/user/repos ) استنساخ HadoLint ومستودعات GIT Docker Language cd /home/user/repos
git clone https://github.com/hadolint/hadolint.git
git clone https://github.com/hadolint/language-docker.gitاجعل تعديلاتك على Docker Language
في برنامج HadoLint Repo ، قم بتحرير ملف cabal.project ، بحيث تشير خاصية packages إلى الريبو الآخر أيضًا
[...]
packages :
.
../language-docker
[...] cd /home/user/repos/hadolint
cabal configure --enable-tests
cabal build --enable-tests
cabal test REPLICEREDHQ/DOCKERFILELINT ، والآخر يستخدم بواسطة Super-Linter
redcoolbeans/dockerlint
ProjectAtomic/dockerfile_lint