2015-01-27 30 views
7

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?

+3

https://github.com/redhataccess/dockerfile_lint –

risposta

0

Non ho molta familiarità con go ma sembra che si possa semplicemente chiamare il metodo Parse come è fatto nella suite di test here. Se questo non restituisce un errore, passa la tua passata. Suppongo che sia banale esporre a uno script o qualcosa da chiamare durante lo sviluppo.

7

Prova:

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. 
+0

C'è anche 'linea hadolinter': http://hadolint.lukasmartinelli.ch/ –

+2

@ LuísBianchin Sì, è messo a disposizione dello stesso autore - fino a quando si fidati incollando il tuo Dockerfile a una terza parte, certo. – Devy

0

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.

Problemi correlati