Hadolint
Линтер Dockerfile, валидатор встроенного bash, написанный на Haskell
Название импортера в Security Center: Hadolint, Hadolint Dockerfile check
Hadolint - это специализированный линтер Dockerfile, предназначенный для проверки правильности синтаксиса Dockerfile, соблюдения лучших практик и выявления потенциальных проблем, связанных с созданием Docker-образов. Он фокусируется на качестве кода и соответствии стандартам Dockerfile, помогая создавать безопасные и хорошо структурированные образы Docker.
Hadolint анализирует Docker-файлы, проверяя их на наличие типичных ошибок, соответствие рекомендациям Dockerfile и потенциальные проблемы безопасности. Этот инструмент может помочь разработчикам и командам DevOps поддерживать высокое качество Docker-файлов, гарантируя, что получаемые образы безопасны, эффективны и не содержат ошибок.
Одной из примечательных особенностей Hadolint является способность предоставлять отзывы о Dockerfile еще до создания образов, что позволяет разработчикам выявлять потенциальные проблемы на ранних этапах процесса разработки.
Пример команды Curl
curl -X POST localhost/api/v1/scan/import/ -H "Authorization: Token a75bb26171cf391671e67b128bfc8ae1c779ff7b" -H "Content-Type: multipart/form-data" -F "file=@./" -F "product_name=Product1" -F "product_type=Application" -F "scanner_name=Hadolint Dockerfile check" -F "branch=dev"В этой команде используются следующие параметры:
- -X POST: задает используемый метод HTTP (в данном случае POST).
- -H "Authorization: Token <authorization_token>": задает токен авторизации, полученный от Security Center.
- -H "Content-Type: multipart/form-data": задает тип содержимого запроса.
- -F "file=@<report_file_path>": задает путь к файлу отчета, создаваемого сканером.
- -F "product_name=<product_name>": задает название сканируемого продукта.
- -F "product_type=<product_type>": задает тип сканируемого продукта.
- -F "scanner_name=<scanner_name>": задает имя сканера, используемого для создания отчета (Bandit Scan или GitLab Bandit)
- -F "branch=<branch_name>": (необязательно) указывает имя ветки в репозитории исходного кода (если применимо). Этот параметр особенно полезен, когда вы хотите связать результаты сканирования с определенной веткой в вашем репозитории. Если параметр не указан, сканирование будет связано с веткой по умолчанию
Пример отчета:
[{"line":1,"code":"DL3006","message":"Always tag the version of an image explicitly","column":1,"file":"./test/smoke/Dockerfile","level":"warning"},{"line":3,"code":"DL3018","message":"Pin versions in apk add. Instead of apk add <package> use apk add <package>=<version>","column":1,"file":"./test/smoke/Dockerfile","level":"warning"},{"line":3,"code":"DL3019","message":"Use the --no-cache switch to avoid the need to use --update and remove /var/cache/apk/* when done installing packages","column":1,"file":"./test/smoke/Dockerfile","level":"info"}]
[
    {
   "line":1,"code":"DL3006","message":"Always tag the version of an image explicitly",
       "column":1,"file":"./test/smoke/Dockerfile","level":"warning"
    },
    {
    "line":3,"code":"DL3018","message":"Pin versions in apk add. Instead of `apk add <package>` use `apk add <package>=<version>`",
        "column":1,"file":"./test/smoke/Dockerfile","level":"warning"
    },
    {
    "line":3,"code":"DL3019","message":"Use the `--no-cache` switch to avoid the need to use `--update` and remove `/var/cache/apk/*` when done installing packages",
        "column":1,"file":"./test/smoke/Dockerfile","level":"info"
    }
]Last updated
