
Linter Dockerfile yang lebih pintar yang membantu Anda membangun gambar Docker praktik terbaik. Linter mem -parsing Dockerfile menjadi AST dan melakukan aturan di atas AST. Itu berdiri di atas bahu kerang untuk meletakkan kode bash di dalam instruksi RUN .
Periksa versi online di hadolint.github.io/hadolint
Anda dapat menjalankan hadolint secara lokal untuk memasukkan Dockerfile Anda.
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 datang untuk menyelamatkan, memberikan cara mudah bagaimana menjalankan hadolint di sebagian besar platform. Cukup pipa Dockerfile Anda ke docker run :
docker run --rm -i hadolint/hadolint < Dockerfile
# OR
docker run --rm -i ghcr.io/hadolint/hadolint < Dockerfileatau menggunakan podman:
podman run --rm -i docker.io/hadolint/hadolint < Dockerfile
# OR
podman run --rm -i ghcr.io/hadolint/hadolint < DockerfileAtau menggunakan Windows PowerShell:
cat .Dockerfile | docker run -- rm - i hadolint / hadolint Anda dapat mengunduh binari prebuilt untuk OSX, Windows dan Linux dari halaman rilis terbaru. Namun, jika ini tidak berhasil untuk Anda, silakan kembali ke wadah (Docker), instalasi brew atau sumber.
Di OSX, Anda dapat menggunakan minuman untuk menginstal hadolint .
brew install hadolint Di Windows, Anda dapat menggunakan Scoop untuk menginstal hadolint .
scoop install hadolint Pada distribusi yang telah diinstal nix , Anda dapat menggunakan paket hadolint untuk menjalankan cangkang ad-hoc atau secara permanen menginstal hadolint ke lingkungan Anda.
Seperti disebutkan sebelumnya, hadolint tersedia sebagai gambar kontainer:
docker pull hadolint/hadolint
# OR
docker pull ghcr.io/hadolint/hadolintJika Anda memerlukan wadah dengan akses shell, gunakan varian Debian atau 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 Anda juga dapat membangun hadolint secara lokal. Anda membutuhkan Haskell dan alat pembangun Cabal untuk membangun biner.
git clone https://github.com/hadolint/hadolint
&& cd hadolint
&& cabal configure
&& cabal build
&& cabal installJika Anda ingin ekstensi VS Code Hadolint menggunakan Hadolint dalam wadah, Anda dapat menggunakan skrip pembungkus berikut:
#! /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)
File konfigurasi dapat digunakan secara global atau per proyek. Hadolint mencari file konfigurasi di lokasi berikut atau setara spesifik platformnya dalam urutan ini dan menggunakan yang pertama secara eksklusif:
$PWD/.hadolint.yaml$XDG_CONFIG_HOME/hadolint.yaml$HOME/.config/hadolint.yaml$HOME/.hadolint/hadolint.yaml or $HOME/hadolint/config.yaml$HOME/.hadolint.yaml Di Windows, %LOCALAPPDATA% Environment digunakan sebagai pengganti XDG_CONFIG_HOME . File konfigurasi dapat memiliki ekstensi yaml atau yml .
hadolint Full yaml Config Skema File
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 mendukung aturan yang diabaikan menggunakan file konfigurasi. File konfigurasi harus dalam format yaml . Ini adalah salah satu file konfigurasi yang valid sebagai contoh:
ignored :
- DL3000
- SC1010 Selain itu, hadolint dapat memperingatkan Anda ketika gambar dari repositori yang tidak terpercaya sedang digunakan di DockerFiles, Anda dapat menambahkan kunci trustedRegistries ke file konfigurasi, seperti yang ditunjukkan di bawah ini:
ignored :
- DL3000
- SC1010
trustedRegistries :
- docker.io
- my-company.com:5000
- " *.gcr.io "Jika Anda ingin mengesampingkan keparahan aturan tertentu, Anda dapat melakukannya juga:
override :
error :
- DL3001
- DL3002
warning :
- DL3042
- DL3033
info :
- DL3032
style :
- DL3015 Keluar failure-threshold dengan kode kegagalan hanya ketika aturan dengan keparahan di atas ambang batas dilanggar (tersedia dalam v2.6.0+)
failure-threshold : info
override :
warning :
- DL3042
- DL3033
info :
- DL3032 Selain itu, Anda dapat melewati file konfigurasi khusus di baris perintah dengan opsi --config
hadolint --config /path/to/config.yaml DockerfileUntuk meneruskan file konfigurasi khusus (menggunakan jalur relatif atau absolut) ke wadah, gunakan perintah berikut:
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 < DockerfileSelain file konfigurasi, Hadolint dapat dikonfigurasi dengan variabel lingkungan.
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 Saat menggunakan gambar dasar dengan shell non-posix sebagai default (misalnya gambar berbasis windows), hadolint shell khusus dapat menentukan shell mana yang digunakan gambar dasar, sehingga hadolint dapat secara otomatis mengabaikan semua aturan khusus shell.
FROM mcr.microsoft.com/windows/servercore:ltsc2022
# hadolint shell=powershell
RUN Get-Process notepad | Stop-Process Dimungkinkan juga untuk mengabaikan aturan dengan menambahkan komentar khusus tepat di atas pernyataan DockerFile yang ingin Anda lakukan. Komentar seperti itu terlihat seperti # hadolint ignore=DL3001,SC1081 . Misalnya:
# hadolint ignore=DL3006
FROM ubuntu
# hadolint ignore=DL3003,SC1035
RUN cd /tmp && echo "hello!"Komentar "inline mengabaikan" hanya berlaku untuk pernyataan yang mengikutinya.
Aturan juga dapat diabaikan secara per file menggunakan pragma abaikan global. Ini berfungsi seperti inline mengabaikan, kecuali bahwa itu berlaku untuk seluruh file, bukan hanya baris berikutnya.
# hadolint global ignore=DL3003,DL3006,SC1035
FROM ubuntu
RUN cd /tmp && echo "foo" Hadolint dapat memeriksa apakah ada label tertentu dan sesuai dengan skema label yang telah ditentukan. Pertama, skema label harus didefinisikan baik melalui baris perintah:
hadolint --require-label author:text --require-label version:semver Dockerfileatau melalui file konfigurasi:
label-schema :
author : text
contact : email
created : rfc3339
version : semver
documentation : url
git-revision : hash
license : spdx Nilai label dapat berupa text , url , semver , hash atau rfc3339 :
| Skema | Keterangan |
|---|---|
| teks | Apa pun |
| RFC3339 | Suatu waktu, diformat menurut RFC 3339 |
| SEMVER | Versi semantik |
| url | Uri seperti yang dijelaskan dalam RFC 3986 |
| hash | Entah hash git pendek atau panjang |
| spdx | Pengidentifikasi lisensi SPDX |
| Alamat email yang sesuai dengan RFC 5322 |
Secara default, Hadolint mengabaikan label apa pun yang tidak ditentukan dalam skema label. Untuk memperingatkan terhadap label tambahan seperti itu, nyalakan label yang ketat, menggunakan baris perintah:
hadolint --strict-labels --require-label version:semver Dockerfileatau file konfigurasi:
strict-labels : true Ketika label ketat diaktifkan, tetapi tidak ada skema label yang ditentukan, hadolint akan memperingatkan jika ada label.
Ini adalah pola umum untuk mengisi nilai label yang tidak secara statis, tetapi secara dinamis pada waktu pembuatan dengan menggunakan variabel:
FROM debian:buster
ARG VERSION= "du-jour"
LABEL version= "${VERSION}" Untuk mengizinkan ini, skema label harus menentukan text sebagai nilai untuk label itu:
label-schema :
version : text Untuk mendapatkan sebagian besar hadolint , penting untuk mengintegrasikannya sebagai cek CI Anda atau ke editor Anda, atau sebagai kait pra-komit, untuk meletakkan Dockerfile Anda saat Anda menulisnya. Lihat dokumen integrasi kami.
Daftar aturan yang diterapkan yang tidak lengkap. Klik kode kesalahan untuk mendapatkan informasi lebih rinci.
Aturan dengan awalan DL berasal dari hadolint . Lihatlah Rules.hs untuk menemukan implementasi aturan.
Aturan dengan awalan SC berasal dari kerang (hanya aturan paling umum yang terdaftar, ada lusinan lagi).
Harap buat masalah jika Anda memiliki ide untuk aturan yang baik.
| Aturan | Keparahan default | Keterangan |
|---|---|---|
| DL1001 | Mengabaikan | Harap jangan menggunakan inline abaikan pragma # hadolint ignore=DLxxxx . |
| DL3000 | Kesalahan | Gunakan Workdir absolut. |
| DL3001 | Info | Untuk beberapa perintah bash, tidak masuk akal menjalankannya dalam wadah Docker seperti SSH, Vim, Shutdown, Service, PS, Free, Top, Kill, Mount, IfConfig. |
| DL3002 | Peringatan | Pengguna terakhir tidak boleh berakar. |
| DL3003 | Peringatan | Gunakan WorkDir untuk beralih ke direktori. |
| DL3004 | Kesalahan | Jangan gunakan sudo karena mengarah pada perilaku yang tidak dapat diprediksi. Gunakan alat seperti Gosu untuk menegakkan root. |
| DL3006 | Peringatan | Selalu tag versi gambar secara eksplisit. |
| DL3007 | Peringatan | Menggunakan terbaru rentan terhadap kesalahan jika gambar akan diperbarui. Pin versi secara eksplisit ke tag rilis. |
| DL3008 | Peringatan | Versi Pin di apt-get install . |
| DL3009 | Info | Hapus daftar apt-get setelah menginstal sesuatu. |
| DL3010 | Info | Gunakan Tambah untuk mengekstraksi arsip ke dalam gambar. |
| DL3011 | Kesalahan | Kisaran port UNIX yang valid dari 0 hingga 65535. |
| DL3012 | Kesalahan | Beberapa instruksi HEALTHCHECK . |
| DL3013 | Peringatan | Versi Pin di Pip. |
| DL3014 | Peringatan | Gunakan sakelar -y . |
| DL3015 | Info | Hindari paket tambahan dengan menentukan --no-install-recommends . |
| DL3016 | Peringatan | Versi PIN di npm . |
| DL3018 | Peringatan | Pin versi di apk add . Alih -alih apk add <package> Gunakan apk add <package>=<version> . |
| DL3019 | Info | Gunakan sakelar --no-cache untuk menghindari kebutuhan untuk menggunakan --update dan menghapus /var/cache/apk/* saat selesai menginstal paket. |
| DL3020 | Kesalahan | Gunakan COPY alih -alih ADD untuk file dan folder. |
| DL3021 | Kesalahan | COPY dengan lebih dari 2 argumen membutuhkan argumen terakhir untuk diakhiri dengan / |
| DL3022 | Peringatan | COPY --from harus merujuk sebelumnya yang ditentukan FROM alias |
| DL3023 | Kesalahan | COPY --from tidak dapat merujuknya sendiri FROM alias |
| DL3024 | Kesalahan | FROM alias (nama panggung) harus unik |
| DL3025 | Peringatan | Gunakan argumen notasi JSON untuk argumen CMD dan entrypoint |
| DL3026 | Kesalahan | Gunakan hanya registri yang diizinkan dalam FROM image |
| DL3027 | Peringatan | Jangan gunakan apt karena dimaksudkan untuk menjadi alat pengguna akhir, gunakan apt-get atau apt-cache sebagai gantinya |
| DL3028 | Peringatan | PIN Versi dalam instalasi permata. Alih -alih gem install <gem> Gunakan gem install <gem>:<version> |
| DL3029 | Peringatan | Jangan gunakan -bendera platform dengan dari. |
| DL3030 | Peringatan | Gunakan sakelar -y untuk menghindari input manual yum install -y <package> |
| DL3032 | Peringatan | yum clean all hilang setelah perintah yum. |
| DL3033 | Peringatan | Tentukan versi dengan yum install -y <package>-<version> |
| DL3034 | Peringatan | Sakelar non -interaktif hilang dari perintah zypper : zypper install -y |
| DL3035 | Peringatan | Jangan gunakan zypper dist-upgrade . |
| DL3036 | Peringatan | zypper clean hilang setelah penggunaan zypper. |
| DL3037 | Peringatan | Tentukan versi dengan zypper install -y <package>[=]<version> . |
| DL3038 | Peringatan | Gunakan sakelar -y untuk menghindari input manual dnf install -y <package> |
| DL3040 | Peringatan | dnf clean all yang hilang setelah perintah DNF. |
| DL3041 | Peringatan | Tentukan versi dengan dnf install -y <package>-<version> |
| DL3042 | Peringatan | Hindari Direktori Cache dengan pip install --no-cache-dir <package> . |
| DL3043 | Kesalahan | ONBUILD , FROM atau MAINTAINER yang dipicu dari dalam instruksi ONBUILD . |
| DL3044 | Kesalahan | Jangan merujuk ke variabel lingkungan dalam pernyataan ENV yang sama di mana ia didefinisikan. |
| DL3045 | Peringatan | COPY ke tujuan relatif tanpa set WORKDIR . |
| DL3046 | Peringatan | useradd tanpa bendera -l dan uid tinggi akan menghasilkan gambar yang terlalu besar. |
| DL3047 | Info | wget tanpa bendera --progress akan menghasilkan log build yang membengkak saat mengunduh file yang lebih besar. |
| DL3048 | Gaya | Kunci label tidak valid |
| DL3049 | Info | Label <label> hilang. |
| DL3050 | Info | Label berlebihan hadir. |
| DL3051 | Peringatan | Label <label> kosong. |
| DL3052 | Peringatan | Label <label> bukan URL yang valid. |
| DL3053 | Peringatan | Label <label> bukan format waktu yang valid - harus sesuai dengan RFC3339. |
| DL3054 | Peringatan | Label <label> bukan pengidentifikasi lisensi SPDX yang valid. |
| DL3055 | Peringatan | Label <label> bukan hash git yang valid. |
| DL3056 | Peringatan | Label <label> tidak sesuai dengan versi semantik. |
| DL3057 | Mengabaikan | Instruksi HEALTHCHECK hilang. |
| DL3058 | Peringatan | Label <label> bukan format email yang valid - harus sesuai dengan RFC5322. |
| DL3059 | Info | Beberapa instruksi RUN berturut -turut. Pertimbangkan konsolidasi. |
| DL3060 | Info | yarn cache clean yang hilang setelah yarn install dijalankan. |
| DL3061 | Kesalahan | Pesanan Instruksi Tidak Valid. Dockerfile harus dimulai dengan FROM , ARG atau komentar. |
| DL4000 | Kesalahan | MAINTAINER sudah usang. |
| DL4001 | Peringatan | Baik menggunakan wget atau curl tetapi tidak keduanya. |
| DL4003 | Peringatan | Beberapa instruksi CMD ditemukan. |
| DL4004 | Kesalahan | Beberapa instruksi ENTRYPOINT ditemukan. |
| DL4005 | Peringatan | Gunakan SHELL untuk mengubah shell default. |
| DL4006 | Peringatan | Atur opsi SHELL -o pipefail sebelum RUN dengan pipa di dalamnya |
| SC1000 | $ tidak digunakan secara khusus dan karenanya harus diloloskan. | |
| SC1001 | c akan menjadi 'c' reguler dalam konteks ini. | |
| SC1007 | Hapus ruang setelah = jika mencoba menetapkan nilai (atau untuk string kosong, gunakan var='' ... ). | |
| SC1010 | Gunakan titik koma atau linefeed sebelum done (atau kutip untuk membuatnya literal). | |
| SC1018 | Ini adalah ruang unicode non-breaking. Hapus dan ketet kembali sebagai ruang. | |
| SC1035 | Anda membutuhkan ruang di sini | |
| SC1045 | Itu bukan foo &; bar , Just foo & bar . | |
| SC1065 | Mencoba mendeklarasikan parameter? Jangan. Use () dan rujuk ke params sebagai $1 , $2 dll. | |
| SC1066 | Jangan gunakan $ di sisi kiri penugasan. | |
| SC1068 | Jangan menempatkan spasi di sekitar = dalam tugas. | |
| SC1077 | Untuk ekspansi perintah, kutu harus miring ke kiri (`vs ´). | |
| SC1078 | Apakah Anda lupa untuk menutup string yang dikutip ganda ini? | |
| SC1079 | Ini sebenarnya adalah kutipan akhir, tetapi karena char berikutnya, itu terlihat mencurigakan. | |
| SC1081 | Script sensitif. Gunakan if , tidak If . | |
| SC1083 | {/} Ini literal. Periksa ekspresi (hilang ;/n ?) Atau kutip. | |
| SC1086 | Jangan gunakan $ pada nama iterator di untuk loop. | |
| SC1087 | Kawat gigi diperlukan saat memperluas array, seperti dalam ${array[idx]} . | |
| SC1095 | Anda memerlukan ruang atau linefeed antara nama fungsi dan tubuh. | |
| SC1097 | Tak terduga == . Untuk tugas, gunakan = . Untuk perbandingan, gunakan [ .. ] atau [[ .. ]] . | |
| SC1098 | Kutipan/Escape Karakter Khusus Saat Menggunakan eval , Misalnya eval "a=(b)" . | |
| SC1099 | Anda membutuhkan ruang sebelum # . | |
| SC2002 | Kucing yang tidak berguna. Pertimbangkan cmd < file | .. atau cmd file | .. alih-alih. | |
| SC2015 | Perhatikan bahwa A && B || C bukan jika-kemudian-else. C dapat berjalan saat A benar. | |
| SC2026 | Kata ini berada di luar kutipan. Apakah Anda bermaksud untuk 'bersarang' "'kutipan tunggal'" sebagai gantinya '? | |
| SC2028 | echo tidak akan memperluas urutan pelarian. Pertimbangkan printf . | |
| SC2035 | Gunakan ./*glob* atau -- *glob* Jadi nama dengan tanda hubung tidak akan menjadi opsi. | |
| SC2039 | Di POSIX SH, ada sesuatu yang tidak terdefinisi. | |
| SC2046 | Kutip ini untuk mencegah pemisahan kata | |
| SC2086 | Kutipan ganda untuk mencegah globbing dan pemisahan kata. | |
| SC2140 | Kata ada dalam bentuk "A"B"C" (B ditunjukkan). Apakah maksud Anda "ABC" atau "A"B"C" ? | |
| SC2154 | var direferensikan tetapi tidak ditugaskan. | |
| SC2155 | Menyatakan dan menetapkan secara terpisah untuk menghindari menutup nilai pengembalian. | |
| SC2164 | Gunakan cd ... || exit dalam kasus cd gagal. |
Jika Anda seorang Haskeller berpengalaman, kami akan sangat berterima kasih jika Anda akan memisahkan kode kami dalam ulasan.
Untuk mengkompilasi, Anda akan memerlukan lingkungan Haskell baru-baru ini dan cabal-install .
Repositori Klon
git clone --recursive [email protected]:hadolint/hadolint.gitInstal dependensi dan kompilasi sumber
cabal configure
cabal build(Opsional) Instal Hadolint di sistem Anda
cabal installCara termudah untuk mencoba parser adalah menggunakan 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 "Kompilasi dengan unit tes dan jalankan:
cabal configure --enable-tests
cabal build --enable-tests
cabal testJalankan Tes Integrasi:
./integration_test.sh Sintaks DockerFile sepenuhnya dijelaskan dalam referensi DockerFile. Lihat saja language-docker .
Hadolint menggunakan banyak perpustakaan untuk melakukan pekerjaan kotor. Secara khusus, bahasa-docker digunakan untuk mengurai dockerfiles dan menghasilkan AST yang kemudian dapat dianalisis. Untuk membangun Hadolint terhadap versi kustom perpustakaan tersebut, lakukan hal berikut. Contoh ini menggunakan bahasa-docker, tetapi akan bekerja dengan perpustakaan lain juga.
/home/user/repos cd /home/user/repos
git clone https://github.com/hadolint/hadolint.git
git clone https://github.com/hadolint/language-docker.gitBuat modifikasi Anda menjadi docker bahasa
Dalam repo Hadolint, edit file cabal.project , sehingga properti packages menunjuk ke repo lainnya juga
[...]
packages :
.
../language-docker
[...] cd /home/user/repos/hadolint
cabal configure --enable-tests
cabal build --enable-tests
cabal test RepicatedHQ/DockerFilelint, linter lain yang digunakan oleh super-linter
Redcoolbeans/Dockerlint
Projectatomic/dockerfile_lint