From 943171234bd0ac09cf03e64be40683fa41dabdb3 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 10 Aug 2026 07:14:12 +0000 Subject: [PATCH] =?UTF-8?q?Poser=20le=20bit=20ex=C3=A9cutable=20du=20point?= =?UTF-8?q?=20d'entr=C3=A9e=20dans=20l'image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `COPY` recopie le mode du fichier source, et ce mode se perd hors d'un clone git : archive envoyée à Portainer, contexte reconstitué, système de fichiers qui ne porte pas la permission. La panne que cela produit ne ressemble à rien. La forme exec de `CMD` échoue avant le premier octet de sortie, si bien que le conteneur s'arrête sans une seule ligne de journal — et l'on cherche un défaut applicatif là où il n'y a jamais eu de processus. Mesuré : sans le bit, « Permission denied » et aucune sortie du script ; avec, le script s'exécute. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Cr9dkEHwbDgkWPnyGj1Rjv --- Dockerfile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Dockerfile b/Dockerfile index 4f83720..7f86827 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,6 +54,17 @@ COPY --from=build --chown=nextjs:nodejs /app/public ./public COPY --chown=nextjs:nodejs docker/entrypoint.sh ./docker/entrypoint.sh COPY --chown=nextjs:nodejs docker/bootstrap-role.mjs ./docker/bootstrap-role.mjs +# Le bit exécutable est posé **dans l'image**, sans dépendre de celui du fichier +# source. `COPY` recopie le mode d'origine, et ce mode se perd hors d'un clone +# git : archive envoyée à Portainer, contexte reconstitué, système de fichiers +# qui ne porte pas la permission. +# +# La panne que cela produit ne ressemble à rien : la forme exec de `CMD` échoue +# **avant** le premier octet de sortie, si bien que le conteneur s'arrête sans +# une ligne de journal. On cherche alors un défaut applicatif là où il n'y a +# jamais eu de processus. +RUN chmod +x ./docker/entrypoint.sh + # Créé dans l'image, et non laissé au montage : un volume nommé hérite du # propriétaire du répertoire qu'il recouvre, et sans cela l'application — # qui ne tourne pas en root — ne pourrait pas y écrire.