Ein Dockerfile mit 55 hadolint-Regeln prüfen: feste Versionen, root-Benutzer, Cache und mehr
Läuft in Ihrem Browser. Nichts, was Sie eingeben, wird irgendwohin gesendet. Geprüft am 16. Oktober 2026.Ein Dockerfile-Linter liest die Datei, ohne sie zu bauen, und markiert riskante oder verschwenderische Zeilen. Dieser wendet 55 der DL-Regeln von hadolint an, etwa DL3008 für apt-get-Pakete ohne feste Version und DL3002 für den Betrieb als root, und nennt zu jedem Fund Zeile, Stufe und Lösung. Er läuft in Ihrem Browser, ohne Installation und ohne Docker.
Diese Seite wurde maschinell aus dem englischen Original übersetzt. Die Übersetzung wurde noch von keinem Menschen geprüft; maßgeblich ist die englische Fassung. Englisches Original lesen
Fügen Sie das Dockerfile in das Feld ein, öffnen Sie die Datei oder klicken Sie auf Beispiel ausprobieren.
Lesen Sie die nach Zeile sortierten Funde: Jeder hat eine Stufe, seinen hadolint-Code, das Problem und die Lösung.
Klicken Sie auf einen Fund, um zu seiner Zeile zu springen, beheben Sie ihn und sehen Sie, wie sich die Liste beim Tippen aktualisiert.
Klicken Sie auf Bericht kopieren, um die Funde als Text zu übernehmen, für einen Pull Request oder ein Ticket.
Ein Dockerfile kann heute bauen und nächsten Monat scheitern: Ein Basis-Image ohne feste Version wandert weiter, ein apt-get install holt eine neue Version, ein in einer Schicht gelassener Cache macht das Image Hunderte Megabyte größer. Ein Linter findet das, bevor es ausgeliefert wird. hadolint ist der Standard in CI-Pipelines; diese Seite wendet seine Dockerfile-Regeln in Ihrem Browser an.
Was geprüft wird. Jeder Fund nennt seine Zeile, seinen hadolint-Code, eine Stufe und eine Lösung in einer Zeile. Die Regeln gliedern sich in fünf Gruppen:
| Gruppe | Beispiele |
|---|---|
| Reproduzierbare Builds | DL3006 Image ohne Tag, DL3007 latest, DL3008 apt-get, DL3013 pip, DL3016 npm, DL3018 apk |
| Kleinere Images | DL3009 apt-Listen, DL3015 recommends, DL3019 apk-Cache, DL3042 pip-Cache, DL3059 zusätzliche RUN-Schichten |
| Sicherheit | DL3002 root-Benutzer, DL3004 sudo, DL4006 pipefail |
| Korrektheit | DL3011 Portbereich, DL3021 COPY-Ziel, DL3022 und DL3023 Stage-Namen, DL3044 ENV, DL3061 Reihenfolge |
| Klare Absicht | DL3000 WORKDIR, DL3003 cd, DL3020 ADD, DL3025 JSON-CMD, DL4000 MAINTAINER |
Wie nah es an hadolint ist. Die Regeln wurden aus dem Quellcode von hadolint 2.12 geschrieben, und die Tests verwenden die Antworten des echten hadolint-Programms für mehr als 80 Dockerfiles: dieselben Codes in denselben Zeilen, jedes Mal. Multi-Stage-Builds, ONBUILD, Fortsetzungszeilen, die escape-Direktive und eingebettete # hadolint ignore=-Kommentare verhalten sich wie in hadolint. Die SC-Warnungen von ShellCheck zum Shell-Code in RUN-Zeilen sind nicht enthalten.
Eine Regel abschalten. Schreiben Sie # hadolint ignore=DL3008 in die Zeile vor einer Anweisung, um diese Regel dort zu überspringen, oder # hadolint global ignore=DL3059 an beliebiger Stelle, um sie für die ganze Datei zu überspringen. Die Zusammenfassung sagt, wie viele Funde abgeschaltet wurden.
Alles läuft in Ihrem Browser: Das Dockerfile, das Sie einfügen oder öffnen, wird nie hochgeladen.
DL3008 besagt, dass eine apt-get-install-Zeile Pakete ohne Version nennt, sodass jeder Build etwas anderes installieren kann. Schreiben Sie Paket=Version, etwa curl=7.88.1-10+deb12u5, und ermitteln Sie die aktuelle Version mit apt-cache policy curl im Basis-Image. Feste Versionen machen das Image reproduzierbar; aktualisieren Sie sie bewusst, nicht zufällig.
Ein Container, der als root läuft, hat darin root-Rechte. Ein Angreifer, der in die Anwendung eindringt, kann also mehr anrichten, und ein Fehler in einem eingebundenen Volume kann Dateien des Hosts ändern. Legen Sie in einem RUN einen Benutzer an, etwa useradd app, und beenden Sie die Stage mit USER app. Build-Schritte davor können weiterhin als root laufen.
Jedes RUN erzeugt eine Schicht, und eine in einer späteren Schicht gelöschte Datei belegt in der früheren weiterhin Platz. apt-get update lädt Paketlisten von mehreren zehn Megabyte herunter; entfernen Sie sie daher im selben RUN mit && rm -rf /var/lib/apt/lists/*. In einem separaten RUN entfernt, spart das nichts.
Schreiben Sie direkt über die Anweisung einen Kommentar: # hadolint ignore=DL3008, oder mehrere Codes durch Kommas getrennt. Um eine Regel für die ganze Datei abzuschalten, schreiben Sie an beliebiger Stelle # hadolint global ignore=DL3059. Beides funktioniert in hadolint selbst und auf dieser Seite, und die Zusammenfassung zählt, was abgeschaltet wurde.
Für die Dockerfile-Regeln ja: Die 55 DL-Codes, ihre Stufen und ihre Bedingungen folgen hadolint 2.12, und die Tests vergleichen mit dem echten hadolint-Programm an mehr als 80 Dateien. Nicht enthalten sind die SC-Warnungen von ShellCheck zum Shell-Code in RUN-Zeilen und die Regeln, die eine Konfigurationsdatei brauchen, etwa erlaubte Registries.
Verwenden Sie COPY für Dateien und Ordner. ADD lädt außerdem URLs herunter und entpackt lokale tar-Archive, was nützlich ist, wenn Sie genau das wollen, und überraschend, wenn nicht. hadolint markiert ADD für eine einfache Datei als DL3020 und ein COPY, auf das ein tar -x desselben Archivs folgt, als DL3010, wo ADD es in einem Schritt erledigen würde.
Sätze und Regeln ändern sich; prüfen Sie die Quelle, bevor Sie sich auf eine Zahl verlassen.
Kommen Sie nicht weiter? Fragen Sie zu Dockerfile-Linter und jeder, der es weiß, kann antworten. Kein Konto nötig.