Se un Dockerfile è scritto con errori, per esempio:C'è un modo per filtrare il Dockerfile?
CMD ["service", "--config", "/etc/service.conf]
(manca citazione)
C'è un modo per Lint per rilevare tale errore prima di costruire?
Se un Dockerfile è scritto con errori, per esempio:C'è un modo per filtrare il Dockerfile?
CMD ["service", "--config", "/etc/service.conf]
(manca citazione)
C'è un modo per Lint per rilevare tale errore prima di costruire?
Se si dispone di un abbonamento RedHat, è possibile accedere all'applicazione "Linter per Dockerfile" direttamente allo https://access.redhat.com/labs/linterfordockerfile/; le informazioni sull'applicazione si trovano a https://access.redhat.com/labsinfo/linterfordockerfile
Questa applicazione Node.js è disponibile anche su GitHub https://github.com/redhataccess/dockerfile_lint se si preferisce eseguirlo localmente.
Prova:
hadolinter
analizza il file Docker in un AST ed esegue il controllo e la convalida in base a best practice Docker images rules. Utilizza anche Shellcheck per filtrare il codice Bash sui comandi RUN
.ho effettuato un semplice test contro di un semplice file di Docker con RUN
, ADD
, ENV
e CMD
. dockerlinter
era intelligente nel raggruppare la stessa violazione di regole insieme ma non era in grado di ispezionare in modo completo come hadolinter
probabilmente a causa della mancanza di Shellcheck
per analizzare staticamente il codice Bash.
Sebbene dockerlinter
non rientri nel raggio di azione che può filtrare, sembra essere molto più semplice da installare. npm install -g dockerlinter
lo farà, mentre la compilazione di hadolinter
richiede un compilatore Haskell e un ambiente di compilazione che richiede sempre una compilazione.
$ hadolint ./api/Dockerfile
L9 SC2046 Quote this to prevent word splitting.
L11 SC2046 Quote this to prevent word splitting.
L8 DL3020 Use COPY instead of ADD for files and folders
L10 DL3020 Use COPY instead of ADD for files and folders
L13 DL3020 Use COPY instead of ADD for files and folders
L18 DL3020 Use COPY instead of ADD for files and folders
L21 DL3020 Use COPY instead of ADD for files and folders
L6 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
L6 DL3009 Delete the apt-get lists after installing something
L6 DL3015 Avoid additional packages by specifying `--no-install-recommends`
$ dockerlint ./api/Dockerfile
WARN: ADD instruction used instead of COPY on line 8, 10, 13, 18, 21
ERROR: ./api/Dockerfile failed.
C'è anche 'linea hadolinter': http://hadolint.lukasmartinelli.ch/ –
@ LuísBianchin Sì, è messo a disposizione dello stesso autore - fino a quando si fidati incollando il tuo Dockerfile a una terza parte, certo. – Devy
Uso molto con successo nella mia pipeline CI nm dockerfile_lint. È possibile aggiungere o estendere regole. Utilizzando lo package.json
è possibile creare diverse configurazioni per i diversi lavori. Ci sono sia
Docker CLI
docker run -it --rm --privileged -v `pwd`:/root/ \
projectatomic/dockerfile-lint \
dockerfile_lint [-f Dockerfile]
docker run -it --rm --privileged -v `pwd`:/root/ \
-v /var/run/docker.sock:/var/run/docker.sock \
projectatomic/dockerfile-lint \
dockerfile_lint image <imageid>
e Atomic CLI disponibili
atomic run projectatomic/dockerfile-lint
atomic run projectatomic/dockerfile-lint image <imageid>
Inoltre è possibile Lint le immagini per il tagging.
https://github.com/redhataccess/dockerfile_lint –