fix(docker): hadolint einführen, TLS-Prüfung beim pecl-Fallback wiederherstellen #58

Merged
fabrice.kirchner merged 4 commits from chore/hadolint into main 2026-09-29 08:58:23 +02:00

hadolint ersetzt dockerfilelint: letzteres liest FROM --platform=... image:tag nicht und hat seit 2018 kein Release mehr. DL3008 und DL3018 bleiben aus, weil gepinnte Paketversionen den regelmäßigen Neubau gegen Sicherheitslücken aushebeln würden.

Der wichtigste Fund:

Beide pecl-Fallbacks luden ohne Zertifikatsprüfung. wget --no-check-certificate https://pecl.php.net/get/redis und dasselbe für imagick. Damit war der Pfad, der eine PHP-Erweiterung in das Shop-Image installiert, gegen einen Man-in-the-Middle offen. Das Flag ist raus, und ca-certificates steht jetzt ausdrücklich in der Paketliste, statt sich auf das Basisimage zu verlassen.

Dockerfile.php, für hadolint:

  • $PHP_INI_DIR und elf $(nproc) gequotet
  • vier Log-Symlinks in eine RUN
  • Versionsvergleich ohne Pipe (awk -v statt echo | awk)
  • php -r 'ini_get("extension_dir")' statt php -i | grep | head | awk
  • DL4001 mit Begründung ausgenommen: wget ist der pecl-Fallback, curl holt den ioncube-Loader, beides sind funktionierende Pfade

Dockerfile.apache:

  • zwei ADD zu COPY
  • drei RUN-Ketten zusammengefasst

Geprüft: beide Images gebaut (PHP 8.4). Apache meldet Syntax OK, die 50 geladenen Module sind identisch zum Altstand. Im PHP-Image sind redis, imagick, gd, intl, OPcache und der ionCube Loader v15.5.1 geladen; dass ionCube lädt, belegt nebenbei den umgebauten extension_dir-Aufruf, und dass OPcache installiert wurde, den umgebauten Versionsvergleich. Der Fallback-Download ohne das Flag ist im fertigen Image ausgeführt worden und liefert beide Archive korrekt.

hadolint ersetzt dockerfilelint: letzteres liest `FROM --platform=... image:tag` nicht und hat seit 2018 kein Release mehr. DL3008 und DL3018 bleiben aus, weil gepinnte Paketversionen den regelmäßigen Neubau gegen Sicherheitslücken aushebeln würden. Der wichtigste Fund: **Beide pecl-Fallbacks luden ohne Zertifikatsprüfung.** `wget --no-check-certificate https://pecl.php.net/get/redis` und dasselbe für imagick. Damit war der Pfad, der eine PHP-Erweiterung in das Shop-Image installiert, gegen einen Man-in-the-Middle offen. Das Flag ist raus, und `ca-certificates` steht jetzt ausdrücklich in der Paketliste, statt sich auf das Basisimage zu verlassen. Dockerfile.php, für hadolint: - `$PHP_INI_DIR` und elf `$(nproc)` gequotet - vier Log-Symlinks in eine RUN - Versionsvergleich ohne Pipe (`awk -v` statt `echo | awk`) - `php -r 'ini_get("extension_dir")'` statt `php -i | grep | head | awk` - DL4001 mit Begründung ausgenommen: wget ist der pecl-Fallback, curl holt den ioncube-Loader, beides sind funktionierende Pfade Dockerfile.apache: - zwei `ADD` zu `COPY` - drei RUN-Ketten zusammengefasst Geprüft: beide Images gebaut (PHP 8.4). Apache meldet `Syntax OK`, die 50 geladenen Module sind identisch zum Altstand. Im PHP-Image sind redis, imagick, gd, intl, OPcache und der ionCube Loader v15.5.1 geladen; dass ionCube lädt, belegt nebenbei den umgebauten `extension_dir`-Aufruf, und dass OPcache installiert wurde, den umgebauten Versionsvergleich. Der Fallback-Download ohne das Flag ist im fertigen Image ausgeführt worden und liefert beide Archive korrekt.
dockerfilelint liest `FROM --platform=... image:tag` nicht und meldet
darauf ein fehlendes Tag, obwohl es danebensteht. Das Projekt hat seit
2018 kein Release mehr.

hadolint versteht die Syntax, faengt das echte fehlende Tag weiterhin
und prueft die RUN-Zeilen zusaetzlich mit ShellCheck. DL3008 und DL3018
bleiben aus, weil gepinnte Paketversionen den regelmaessigen Neubau der
Images gegen Sicherheitsluecken aushebeln wuerden.
ADD wird hier nur fuer zwei Dateien aus dem Build-Kontext gebraucht,
dafuer ist COPY zustaendig. Die zusammengefassten RUN-Zeilen sparen
Schichten; die Liste der geladenen Apache-Module bleibt identisch.
fix(docker): TLS-Pruefung beim pecl-Fallback wiederherstellen
All checks were successful
Reusable · Commit Lint / commitlint (push) Successful in 13s
Reusable · Commit Lint / commitlint (pull_request) Successful in 15s
c261deda01
Beide wget-Fallbacks luden die Erweiterung mit --no-check-certificate,
also ohne Pruefung des Zertifikats von pecl.php.net. Der Download
funktioniert ohne das Flag; ca-certificates steht jetzt ausdruecklich in
der Paketliste, statt sich auf das Basisimage zu verlassen.

Dazu fuer hadolint: Shell-Ausdruecke gequotet, die Log-Symlinks in eine
RUN zusammengefasst und die Pipe `php -i | grep | head | awk` durch
ini_get ersetzt.
Merge branch 'main' into chore/hadolint
All checks were successful
Reusable · Commit Lint / commitlint (pull_request) Successful in 13s
Reusable · Commit Lint / commitlint (push) Successful in 16s
07d3217568
fabrice.kirchner deleted branch chore/hadolint 2026-09-29 08:58:24 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
fabrice.kirchner/jtl-shop-docker!58
No description provided.