J'ai une application Web qui doit stocker des fichiers temporaires partout où elle s'exécute. Puisque je veux que l'application s'exécute à la fois dans Docker et dans un environnement de développement, j'ai besoin d'un répertoire sûr qui peut être créé dans l'environnement de développement (Mac OS généralement) et dans le conteneur Docker.

J'ai utilisé /usr/temp sur le conteneur mais sur un mac, ce répertoire est inaccessible.

Quel serait le répertoire le meilleur et le plus sûr à utiliser?

Je vous remercie

0
Leo 27 janv. 2019 à 11:29

3 réponses

Meilleure réponse

J'ai fini par avoir ce qui suit dans mon Dockerfile

ENV HOME /usr
WORKDIR $HOME/app
RUN mkdir -p $HOME/temp/abc \
             $HOME/temp/xyz

Et dans mes fichiers de configuration, j'ai utilisé /temp/abc ou /temp/xyz pour pointer vers les dossiers de destination.

Enfin, dans mon code d'application, je me suis assuré de faire précéder toute résolution de chemin par process.env['HOME'] (NodeJS).

Ce qui précède fonctionne bien à la fois dans un environnement de développement, puisque $ HOME est défini par défaut sur un mac et également en production qui exécute le docker ci-dessus.

Merci tout le monde!

0
Leo 28 janv. 2019 à 15:38

Docker fournit un concept de volumes pour vous aider à synchroniser les données entre l'hôte et le conteneur.

Dans votre cas, disons que vous souhaitez synchroniser /home/user/data de votre hôte vers /usr/temp dans Container

Tu peux le faire comme ça

docker run -itd -v /home/user/data:/usr/temp --name mycontainer imagename

Une fois que le conteneur est opérationnel

Ajoutez un fichier dans le dossier data et il sera disponible dans le conteneur dans le dossier temp et inversement.

0
MyTwoCents 27 janv. 2019 à 09:19

Si la variable d'environnement $TMPDIR est définie, c'est un emplacement standard pour les fichiers temporaires, et si elle n'est pas définie, la valeur par défaut est généralement /tmp. (Sur MacOS, cela pointe vers un répertoire par utilisateur qui se remplit rapidement de désordre.) Vous ne mentionnez pas la langue que vous utilisez, mais la plupart ont une fonction ou un module spécifique pour créer un fichier "dans le répertoire temporaire habituel" , qui est celui-ci.

En général, les variables d'environnement sont un bon moyen d'encapsuler les différences entre votre développement et divers environnements de déploiement et cela a du sens ici.

Rappelez-vous également, d'une part, que tout ce que vous ne persistez pas explicitement dans l'espace du système de fichiers Docker sera perdu lorsque le conteneur se terminera, et d'autre part, que si le conteneur reste en cours d'exécution pendant une longue période, il n'y a aucune sorte du nettoyeur automatique /tmp. Vous devrez gérer correctement le cycle de vie de ces fichiers. Souvenez-vous également que vous avez un contrôle presque complet sur la disposition du système de fichiers du conteneur et que si vous avez besoin d'un répertoire spécifique pour exister, vous pouvez le RUN mkdir dans votre Dockerfile.

1
David Maze 27 janv. 2019 à 12:08