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) :
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`.
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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Contexte
La PR Renovate #23 (hadolint-action
v3.3.0->v3.5.0) est rouge : run 8236 / job hadolinthadolint 2.15.x (embarque dans l'action v3.5.0) ajoute la regle DL3066, et hadolint echoue par defaut des le niveau
info: le jobhadolintsort en erreur alors queUSER muserest parfaitement legitime. C'est le bump qui casse le lint, pas le Dockerfile d'avant.Changements
1.
Dockerfile—museretait cree sans uid/gid explicite, donc son identite numerique dependait de l'auto-assignation de busybox. Les deux ids sont desormais pinnes etUSERpasse en forme numerique (toujours resolvable cote hote).Verification dans l'image publique actuelle (
jcabillot/mysql-client:latest,/etc/passwdde la couche) :Le pin
1000:1000reproduit donc exactement l'identite runtime existante — pas de changement de comportement pour les consommateurs. A noter : unUSER 1000seul (sans groupe) aurait fait basculer le GID a 0, d'ou le1000:1000explicite 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:9 DL3066 info-> exit 1La CI (
hadolint+build-test) valide ensuite le build reel de l'image ettests/test.sh.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.