Problème lors de la mise à jour vers 26.1
Sur cette page
Après une mise à jour d’une version antérieure à 26.1 vers Relution 26.1 ou une version ultérieure, le conteneur Docker ne démarre plus. Le journal du conteneur affiche de manière répétée l’erreur suivante :
Exception in thread "main" java.lang.reflect.InvocationTargetException
Caused by: java.io.IOException: Permission denied
at java.base/java.io.File.createTempFile(File.java:2184)
at io.relution.boot.Main.checkTempDirectory(Main.java:291)
at io.relution.boot.Main.main(Main.java:216)
Cause
Avec la version 26.1, l’ID de l’utilisateur dans le conteneur a été modifié en raison de bonnes pratiques de sécurité mises à jour. Le répertoire temporaire existant (/tmp/relution.tmp, ou $TMPDIR/relution.tmp si la variable d’environnement TMPDIR est définie) dans le volume Docker appartient désormais à un utilisateur incorrect. Depuis la version 26.1, Relution utilise ce répertoire comme répertoire temporaire et vérifie au démarrage qu’il est accessible en écriture. Le service Relution n’obtient donc pas d’accès en écriture au démarrage et s’arrête. Malheureusement, cela ne peut pas être corrigé automatiquement lors de la mise à jour.
Au démarrage, le service vérifie l’accès au répertoire temporaire :
- S’il n’existe pas, il est recréé (avec les bonnes permissions).
- S’il existe déjà, il est vidé.
Le service crée ensuite un fichier de test pour vérifier que le répertoire est accessible en écriture. Cette vérification échoue avec des permissions incorrectes.
Solution
La commande suivante recrée le conteneur Relution, y compris le volume.
docker compose up -d --force-recreate --renew-anon-volumes --no-deps relution
Si le nom de service du conteneur est différent, relution est remplacé en conséquence.
Après le redémarrage, Relution recrée automatiquement le répertoire relution.tmp avec les permissions correctes. L’erreur Permission denied ne se produit plus et le service démarre normalement.
Remarques complémentaires
- Cette erreur se produit uniquement lors des mises à jour d’une version antérieure à 26.1 vers 26.1 ou une version ultérieure (par exemple directement de 26.0 vers 26.5), car le répertoire existe déjà avec les anciennes permissions.
- Pour les nouvelles installations à partir de la version 26.1, ce problème ne se produit pas.
- Relution vide
relution.tmpà chaque démarrage. Les fichiers qui y sont stockés sont perdus au redémarrage. - Si
/tmpest monté en tant que bind mount ou volume nommé, ou siTMPDIRest défini,--renew-anon-volumesne renouvelle pas le répertoire. Si l’erreur persiste dans ce cas, le répertoirerelution.tmpdoit être supprimé. Relution le recrée avec les permissions correctes au prochain démarrage. - Sur une installation Linux sans Docker, la même erreur se produit si
relution.tmpappartient à un autre utilisateur, par exemple après un démarrage de Relution en tant queroot. La commandesudo chown -R relution:relution /tmp/relution.tmpcorrige ce problème, voir Obsolète : Linux (Alma) →.