Problème lors de la mise à jour vers 26.1

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 /tmp est monté en tant que bind mount ou volume nommé, ou si TMPDIR est défini, --renew-anon-volumes ne renouvelle pas le répertoire. Si l’erreur persiste dans ce cas, le répertoire relution.tmp doit ê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.tmp appartient à un autre utilisateur, par exemple après un démarrage de Relution en tant que root. La commande sudo chown -R relution:relution /tmp/relution.tmp corrige ce problème, voir Obsolète : Linux (Alma) →.
Top