Проверить Dockerfile линтером, ничего не устанавливая

hadolint запускается из контейнера и читает Dockerfile со stdin — ни установки, ни следов в системе

docker run --rm -i hadolint/hadolint < Dockerfile
docker run --rm -i hadolint/hadolint hadolint --ignore DL3008 - < Dockerfile
find . -name 'Dockerfile*' -print0 | xargs -0 -I{} sh -c 'echo "--- {}"; docker run --rm -i hadolint/hadolint < "{}"'

Приём общий, не только про hadolint: инструмент, умеющий читать со stdin, запускается из образа через -i и не требует установки. Ни менеджера пакетов, ни версии в системе, ни мусора после — --rm уносит контейнер сразу.

Дефис в hadolint --ignore DL3008 - — это явное указание читать со stdin. Нужен, когда добавляются свои аргументы: без него линтер ждёт путь к файлу и не найдёт его внутри контейнера, потому что файл туда не монтировался.

Что ловит осмысленного: незапиненные версии пакетов (apt-get install curl без версии — источник невоспроизводимых сборок), отсутствие --no-install-recommends, ADD там, где хватает COPY, cd вместо WORKDIR, root-пользователь по умолчанию.

Код возврата ненулевой при найденных проблемах, поэтому команда без изменений встаёт шагом в CI. Полезно сразу задать порог: по умолчанию линтер ругается и на стилистику, и с ходу сделать сборку красной на существующем репозитории — верный способ, чтобы правило отключили целиком.