Проверка Dockerfile по 55 правилам hadolint: закреплённые версии, пользователь root, кэш и другое
Работает в вашем браузере. Ничего из того, что вы вводите, никуда не отправляется. Проверено 16 октября 2026 г..Линтер Dockerfile читает файл, не собирая его, и отмечает рискованные или расточительные строки. Этот применяет 55 правил DL из hadolint, например DL3008 для пакетов apt-get без закреплённой версии и DL3002 для запуска от root, и для каждой находки указывает строку, уровень и исправление. Он работает в вашем браузере, без установки и без Docker.
Эта страница переведена машинным способом с английского оригинала. Перевод ещё не проверен человеком, поэтому ориентируйтесь на английскую версию. Читать английский оригинал
Вставьте Dockerfile в поле, откройте файл или нажмите «Попробовать пример».
Прочитайте находки, отсортированные по строкам: у каждой есть уровень, код hadolint, описание проблемы и способ исправления.
Нажмите на находку, чтобы перейти к её строке, исправьте её и смотрите, как список обновляется по мере ввода.
Нажмите «Копировать отчёт», чтобы забрать находки текстом для pull request или задачи.
Dockerfile может собираться сегодня и сломаться через месяц: базовый образ без закреплённой версии меняется, apt-get install подтягивает новую версию, кэш, оставленный в слое, увеличивает образ на сотни мегабайт. Линтер находит это до выпуска. hadolint — стандарт в CI-конвейерах; эта страница применяет его правила для Dockerfile в вашем браузере.
Что проверяется. Каждая находка указывает строку, код hadolint, уровень и исправление в одну строку. Правила делятся на пять групп:
| Группа | Примеры |
|---|---|
| Воспроизводимые сборки | DL3006 образ без тега, DL3007 latest, DL3008 apt-get, DL3013 pip, DL3016 npm, DL3018 apk |
| Образы меньше | DL3009 списки apt, DL3015 recommends, DL3019 кэш apk, DL3042 кэш pip, DL3059 лишние слои RUN |
| Безопасность | DL3002 пользователь root, DL3004 sudo, DL4006 pipefail |
| Корректность | DL3011 диапазон портов, DL3021 цель COPY, DL3022 и DL3023 имена стадий, DL3044 ENV, DL3061 порядок |
| Ясность намерений | DL3000 WORKDIR, DL3003 cd, DL3020 ADD, DL3025 CMD в JSON, DL4000 MAINTAINER |
Насколько это близко к hadolint. Правила написаны по исходному коду hadolint 2.12, а тесты используют ответы настоящей программы hadolint для более чем 80 Dockerfile: те же коды в тех же строках, каждый раз. Многоступенчатые сборки, ONBUILD, строки продолжения, директива escape и встроенные комментарии # hadolint ignore= ведут себя как в hadolint. Предупреждения SC от ShellCheck о shell-коде внутри строк RUN не включены.
Как отключить правило. Поставьте # hadolint ignore=DL3008 в строке перед инструкцией, чтобы пропустить это правило там, или # hadolint global ignore=DL3059 в любом месте, чтобы пропустить его для всего файла. В сводке указано, сколько находок отключено.
Всё работает в вашем браузере: Dockerfile, который вы вставляете или открываете, никуда не загружается.
DL3008 сообщает, что строка apt-get install называет пакеты без версий, поэтому каждая сборка может установить что-то другое. Пишите пакет=версия, например curl=7.88.1-10+deb12u5, а текущую версию узнайте командой apt-cache policy curl внутри базового образа. Закреплённые версии делают образ воспроизводимым; обновляйте их намеренно, а не случайно.
Контейнер, запущенный от root, имеет внутри права root, поэтому злоумышленник, проникший в приложение, может сделать больше, а ошибка в смонтированном томе может изменить файлы хоста. Создайте пользователя в RUN, например useradd app, и завершите стадию строкой USER app. Шаги сборки до этого по-прежнему могут выполняться от root.
Каждый RUN создаёт слой, и файл, удалённый в более позднем слое, всё равно занимает место в предыдущем. apt-get update загружает списки пакетов размером в десятки мегабайт, поэтому удаляйте их в том же RUN с помощью && rm -rf /var/lib/apt/lists/*. Удаление в отдельном RUN ничего не экономит.
Напишите комментарий прямо над инструкцией: # hadolint ignore=DL3008, или несколько кодов через запятую. Чтобы отключить правило для всего файла, напишите # hadolint global ignore=DL3059 в любом месте. Оба способа работают и в самом hadolint, и на этой странице, а сводка считает, что было отключено.
Для правил Dockerfile — да: 55 кодов DL, их уровни и условия следуют hadolint 2.12, а тесты сравнивают результаты с настоящей программой hadolint на более чем 80 файлах. Не включены предупреждения SC от ShellCheck о shell-коде внутри строк RUN и правила, которым нужен файл конфигурации, например разрешённые реестры.
Используйте COPY для файлов и папок. ADD также скачивает URL и распаковывает локальные tar-архивы, что полезно, когда нужно именно это, и неожиданно, когда нет. hadolint отмечает ADD для обычного файла как DL3020, а COPY, за которым следует tar -x того же архива, как DL3010 — ADD сделал бы это за один шаг.
Ставки и правила меняются; проверьте источник, прежде чем полагаться на цифру.
Всё ещё не получается? Задайте вопрос об инструменте «Линтер Dockerfile» и ответить может любой, кто знает. Учётная запись не нужна.