Sprawdź Dockerfile 55 regułami hadolint: przypięte wersje, użytkownik root, cache i więcej
Działa w przeglądarce. Wpisane dane nie są nigdzie wysyłane. Sprawdzono 16 października 2026.Linter Dockerfile czyta plik bez budowania go i oznacza ryzykowne lub rozrzutne linie. Ten stosuje 55 reguł DL z hadolint, takich jak DL3008 dla pakietów apt-get bez przypiętej wersji i DL3002 dla uruchamiania jako root, i dla każdego znaleziska podaje linię, poziom i poprawkę. Działa w przeglądarce, bez instalacji i bez Dockera.
Ta strona została przetłumaczona maszynowo z angielskiego oryginału. Tłumaczenie nie zostało jeszcze sprawdzone przez człowieka, dlatego wiążąca jest wersja angielska. Przeczytaj angielski oryginał
Wklej Dockerfile do pola, otwórz plik albo kliknij Wypróbuj przykład.
Przeczytaj znaleziska posortowane według linii: każde ma poziom, kod hadolint, opis problemu i sposób naprawy.
Kliknij znalezisko, aby przejść do jego linii, popraw ją i obserwuj, jak lista aktualizuje się podczas pisania.
Kliknij Kopiuj raport, aby zabrać znaleziska jako tekst do pull requesta lub zgłoszenia.
Dockerfile może się budować dziś i przestać za miesiąc: obraz bazowy bez przypiętej wersji się zmienia, apt-get install pobiera nową wersję, cache pozostawiony w warstwie powiększa obraz o setki megabajtów. Linter wyłapuje to przed wdrożeniem. hadolint to standard w potokach CI; ta strona stosuje jego reguły dla Dockerfile w przeglądarce.
Co jest sprawdzane. Każde znalezisko podaje linię, kod hadolint, poziom i poprawkę w jednym zdaniu. Reguły dzielą się na pięć grup:
| Grupa | Przykłady |
|---|---|
| Powtarzalne buildy | DL3006 obraz bez tagu, DL3007 latest, DL3008 apt-get, DL3013 pip, DL3016 npm, DL3018 apk |
| Mniejsze obrazy | DL3009 listy apt, DL3015 recommends, DL3019 cache apk, DL3042 cache pip, DL3059 zbędne warstwy RUN |
| Bezpieczeństwo | DL3002 użytkownik root, DL3004 sudo, DL4006 pipefail |
| Poprawność | DL3011 zakres portów, DL3021 cel COPY, DL3022 i DL3023 nazwy etapów, DL3044 ENV, DL3061 kolejność |
| Jasne intencje | DL3000 WORKDIR, DL3003 cd, DL3020 ADD, DL3025 CMD w JSON, DL4000 MAINTAINER |
Jak blisko jest do hadolint. Reguły napisano na podstawie kodu źródłowego hadolint 2.12, a testy korzystają z odpowiedzi prawdziwego programu hadolint dla ponad 80 plików Dockerfile: te same kody w tych samych liniach, za każdym razem. Buildy wieloetapowe, ONBUILD, linie kontynuacji, dyrektywa escape i komentarze # hadolint ignore= w treści działają jak w hadolint. Ostrzeżenia SC z ShellCheck dotyczące kodu powłoki w liniach RUN nie są uwzględnione.
Wyłączanie reguły. Umieść # hadolint ignore=DL3008 w linii przed instrukcją, aby pominąć tę regułę w tym miejscu, albo # hadolint global ignore=DL3059 w dowolnym miejscu, aby pominąć ją w całym pliku. Podsumowanie podaje, ile znalezisk wyłączono.
Wszystko działa w przeglądarce: wklejony lub otwarty Dockerfile nigdy nie jest wysyłany.
DL3008 mówi, że linia apt-get install wymienia pakiety bez wersji, więc każdy build może zainstalować coś innego. Należy pisać pakiet=wersja, np. curl=7.88.1-10+deb12u5, a bieżącą wersję można sprawdzić poleceniem apt-cache policy curl w obrazie bazowym. Przypięte wersje czynią obraz powtarzalnym; aktualizuje się je celowo, a nie przypadkiem.
Kontener działający jako root ma w środku uprawnienia roota, więc napastnik, który włamie się do aplikacji, może zrobić więcej, a błąd w zamontowanym wolumenie może zmienić pliki hosta. Należy utworzyć użytkownika w RUN, np. useradd app, i zakończyć etap linią USER app. Wcześniejsze kroki builda mogą nadal działać jako root.
Każdy RUN tworzy warstwę, a plik usunięty w późniejszej warstwie nadal zajmuje miejsce we wcześniejszej. apt-get update pobiera listy pakietów o rozmiarze dziesiątek megabajtów, więc należy je usunąć w tym samym RUN poleceniem && rm -rf /var/lib/apt/lists/*. Usunięcie ich w osobnym RUN niczego nie oszczędza.
Należy napisać komentarz bezpośrednio nad instrukcją: # hadolint ignore=DL3008, lub kilka kodów rozdzielonych przecinkami. Aby wyłączyć regułę w całym pliku, wystarczy w dowolnym miejscu napisać # hadolint global ignore=DL3059. Oba sposoby działają w samym hadolint i na tej stronie, a podsumowanie liczy, co zostało wyłączone.
W przypadku reguł Dockerfile tak: 55 kodów DL, ich poziomy i warunki odpowiadają hadolint 2.12, a testy porównują wyniki z prawdziwym programem hadolint na ponad 80 plikach. Nie uwzględniono ostrzeżeń SC z ShellCheck dotyczących kodu powłoki w liniach RUN ani reguł wymagających pliku konfiguracyjnego, takich jak dozwolone rejestry.
Do plików i folderów należy używać COPY. ADD dodatkowo pobiera adresy URL i rozpakowuje lokalne archiwa tar, co jest przydatne, gdy chodzi dokładnie o to, i zaskakujące, gdy nie. hadolint oznacza ADD dla zwykłego pliku jako DL3020, a COPY, po którym następuje tar -x tego samego archiwum, jako DL3010, bo ADD zrobiłby to w jednym kroku.
Stawki i przepisy się zmieniają; przed oparciem się na danej liczbie należy sprawdzić źródło.
Nadal coś nie działa? Zapytaj o narzędzie Linter Dockerfile a odpowiedzieć może każdy, kto zna odpowiedź. Konto nie jest potrzebne.