fix(docker): numeric uid/gid pour hadolint DL3066 + bump hadolint-action v3.5.0 #27

Merged
jcabillot merged 1 commits from fix/dl3066-numeric-uid into master 2026-09-13 10:46:26 -04:00
Owner

Contexte

La PR Renovate #23 (hadolint-action v3.3.0 -> v3.5.0) est rouge : run 8236 / job hadolint

Dockerfile:9 DL3066 info: Non-numeric user-id may not be resolvable by host system
##[error]Process completed with exit code 1.

hadolint 2.15.x (embarque dans l'action v3.5.0) ajoute la regle DL3066, et hadolint echoue par defaut des le niveau info : le job hadolint sort en erreur alors que USER muser est parfaitement legitime. C'est le bump qui casse le lint, pas le Dockerfile d'avant.

Changements

1. Dockerfile — muser etait cree sans uid/gid explicite, donc son identite numerique dependait de l'auto-assignation de busybox. Les deux ids sont desormais pinnes et USER passe en forme numerique (toujours resolvable cote hote).

Verification dans l'image publique actuelle (jcabillot/mysql-client:latest, /etc/passwd de la couche) :

muser:x:1000:1000::/home/muser:/bin/sh     # etc/passwd
muser:x:1000:                              # etc/group

Le pin 1000:1000 reproduit donc exactement l'identite runtime existante — pas de changement de comportement pour les consommateurs. A noter : un USER 1000 seul (sans groupe) aurait fait basculer le GID a 0, d'ou le 1000:1000 explicite avec le groupe cree en amont.

2. Bump hadolint-action v3.3.0 -> v3.5.0 (06be81ba…, # v3.5.0) dans les 4 workflows (cron, main, pr, tag), pour que master soit a jour sans un second passage de CI. Cette PR supersede la #23, que Renovate auto-fermera une fois le bump present sur master.

Verification

Regle reproduite puis fix valide avec le binaire upstream hadolint v2.15.1 :

Dockerfile Resultat
avant Dockerfile:9 DL3066 info -> exit 1
apres aucun finding -> exit 0

La CI (hadolint + build-test) valide ensuite le build reel de l'image et tests/test.sh.

## Contexte La PR Renovate #23 (hadolint-action `v3.3.0` -> `v3.5.0`) est rouge : [run 8236 / job hadolint](https://scm.cabillot.eu/perso/mysql-client/actions/runs/8236/jobs/49414) ``` Dockerfile:9 DL3066 info: Non-numeric user-id may not be resolvable by host system ##[error]Process completed with exit code 1. ``` hadolint **2.15.x** (embarque dans l'action v3.5.0) ajoute la regle **DL3066**, et hadolint echoue par defaut des le niveau `info` : le job `hadolint` sort en erreur alors que `USER muser` est parfaitement legitime. C'est le bump qui casse le lint, pas le Dockerfile d'avant. ## Changements **1. `Dockerfile`** — `muser` etait cree sans uid/gid explicite, donc son identite numerique dependait de l'auto-assignation de busybox. Les deux ids sont desormais pinnes et `USER` passe en forme numerique (toujours resolvable cote hote). Verification dans l'image publique actuelle (`jcabillot/mysql-client:latest`, `/etc/passwd` de la couche) : ``` muser:x:1000:1000::/home/muser:/bin/sh # etc/passwd muser:x:1000: # etc/group ``` Le pin `1000:1000` reproduit donc **exactement** l'identite runtime existante — pas de changement de comportement pour les consommateurs. A noter : un `USER 1000` seul (sans groupe) aurait fait basculer le GID a 0, d'ou le `1000:1000` explicite avec le groupe cree en amont. **2. Bump hadolint-action `v3.3.0` -> `v3.5.0`** (`06be81ba…`, `# v3.5.0`) dans les 4 workflows (`cron`, `main`, `pr`, `tag`), pour que master soit a jour sans un second passage de CI. Cette PR supersede la #23, que Renovate auto-fermera une fois le bump present sur master. ## Verification Regle reproduite puis fix valide avec le binaire upstream **hadolint v2.15.1** : | Dockerfile | Resultat | |---|---| | avant | `Dockerfile:9 DL3066 info` -> exit 1 | | apres | aucun finding -> exit 0 | La CI (`hadolint` + `build-test`) valide ensuite le build reel de l'image et `tests/test.sh`.
opencodecabilloteu added 1 commit 2026-09-13 10:42:22 -04:00
fix(docker): pin numeric uid/gid so hadolint DL3066 passes
PR Checks / build-test (pull_request) Successful in 31s
PR Checks / hadolint (pull_request) Successful in 11s
fb061f33a1
hadolint 2.15.x - pulled in by hadolint-action v3.5.0 - adds DL3066
("Non-numeric user-id may not be resolvable by host system"). The
Dockerfile's `USER muser` trips it and the hadolint job exits 1 (hadolint
fails on info-level findings by default), turning the PR Checks pipeline
red on the Renovate bump PR.

muser was created without an explicit uid/gid, so its numeric identity
depended on busybox's auto-assignment. Both ids are now pinned at
1000:1000 - the values Alpine was already assigning - and USER uses the
numeric form, which is always resolvable by the host.

Verified with the upstream hadolint v2.15.1 binary: the previous
Dockerfile reports "Dockerfile:9 DL3066 info" and exits 1, the fixed one
lints clean and exits 0.

The hadolint-action v3.3.0 -> v3.5.0 bump is included here (all four
workflows, SHA 06be81ba) so that master ends up on v3.5.0 with a clean
lint - superseding Renovate PR #23.
opencodecabilloteu requested review from jcabillot 2026-09-13 10:42:33 -04:00
jcabillot merged commit d2b11aefeb into master 2026-09-13 10:46:26 -04:00
jcabillot deleted branch fix/dl3066-numeric-uid 2026-09-13 10:46:27 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: perso/mysql-client#27