2015-01-27 5 views
7

Если в Dockerfile написан с ошибками, например:Есть ли способ вставить Dockerfile?

CMD ["service", "--config", "/etc/service.conf] (отсутствует котировка)

Есть ли способ, чтобы нибудь вкусненького его обнаружить такую ​​ошибку, прежде чем строить?

+3

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

ответ

0

Я не очень хорошо знаком с go, но похоже, что вы можете просто вызвать метод Parse, как это сделано в тестовом наборе here. Если это не возвращает ошибку, ваш линт пройдет. Я предполагаю, что тривиально выставлять сценарий или что-то, что нужно вызвать во время разработки.

2

Если у вас есть подписка RedHat, вы можете получить доступ к приложению «Linter for Dockerfile» непосредственно по адресу https://access.redhat.com/labs/linterfordockerfile/; информация о заявке находится по адресу https://access.redhat.com/labsinfo/linterfordockerfile

Это приложение Node.js также доступно на GitHub https://github.com/redhataccess/dockerfile_lint, если вы предпочитаете запускать его локально.

7

Try:

Я выполнил простой тест на простой Docker файл с RUN, ADD, ENV и CMD. dockerlinter был сообразительным в том, что группировал одно и то же нарушение правил вместе, но он не смог проверить настолько тщательно, как hadolinter, возможно, из-за отсутствия Shellcheck для статического анализа кода Bash.

Несмотря на то, что dockerlinter отстает от объема, который он может использовать, он, кажется, намного проще для установки. npm install -g dockerlinter, а для компиляции hadolinter требуется компилятор Haskell и среда сборки, которая требуется для компиляции.

$ 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

Существует также 'hadolinter' онлайн: http://hadolint.lukasmartinelli.ch/ –

+2

@ LuísBianchin Да, он доступен тем же автором - до тех пор, как вы уверен, что вы вставляете свой Dockerfile третьим лицам. – Devy

0

Я использую очень успешно в своем трубопроводе CI npm's dockerfile_lint. Вы можете добавлять или расширять правила. Используя package.json, вы можете создавать разные конфигурации для разных заданий. Есть и

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> 

и атомному CLI доступны

atomic run projectatomic/dockerfile-lint 

atomic run projectatomic/dockerfile-lint image <imageid> 

Также вы можете нибудь вкусненькое изображения для мечения.