GNU/Linux >> Tutoriels Linux >  >> Linux

Volume de fichier unique monté en tant que répertoire dans Docker

test est le nom de votre image que vous avez construit avec 'docker build -t test ', pas un /test dossier.

Essayez un Dockerfile avec :

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

Et :

docker run --rm -it -v $(pwd)/file.json:/file.json test

Notez l'utilisation de $(pwd) afin de monter un fichier avec son chemin absolu complet (les chemins relatifs ne sont pas pris en charge)

En utilisant $(pwd) , vous obtiendrez un chemin absolu qui existe, et respectez la casse, par opposition à un nom de fichier ou un chemin qui pourrait ne pas exister.
Un chemin d'hôte inexistant serait monté en tant que dossier dans le conteneur.


C'est peut-être clair dans les réponses ci-dessus ... mais il m'a fallu un certain temps pour le comprendre dans mon cas.

La raison sous-jacente pour laquelle le fichier partagé avec -v apparaît comme un répertoire au lieu d'un fichier est que Docker n'a pas pu trouver le fichier sur l'hôte. Ainsi Docker crée un nouveau répertoire dans le conteneur avec le nom étant le nom du fichier non existant sur l'hôte car Docker pense que l'utilisateur veut juste partager un volume/répertoire qui sera créé à l'avenir.

Ainsi, dans le problème signalé ci-dessus, si vous avez utilisé un répertoire relatif dans la commande -v et que docker ne comprend pas les répertoires relatifs, cela signifie que le fichier n'a pas été trouvé sur l'hôte et donc docker a créé un répertoire. Et la réponse ci-dessus qui suggère d'utiliser $(pwd) sera la bonne solution lorsque le problème est dû à un répertoire relatif.

Mais pour ceux qui lisent cette page qui n'utilisent pas de répertoire relatif et qui ont le même problème... alors essayez de comprendre pourquoi le fichier est manquant sur l'hôte.

Il pourrait s'agir d'une faute de frappe stupide...

Il se peut que vous exécutiez la commande "docker run" à partir d'un client qui génère le conteneur Docker sur un hôte différent et que le fichier partagé n'existe pas sur cet hôte différent. Le fichier partagé avec -v doit exister sur l'hôte où l'agent docker va générer le conteneur... pas nécessairement sur le client où la commande "docker run -v ..." est exécutée (bien qu'ils soient les mêmes dans de nombreux cas).

Il y a d'autres explications possibles ci-dessus pour Mac et Windows... ça pourrait être ça aussi.

Donc, le fichier manquant sur l'hôte est le problème... résolvez le problème dans votre configuration... l'utilisation de $(pwd) pourrait être la solution mais pas toujours.


Linux
  1. Tar :Extraire un seul fichier dans un répertoire sans créer de sous-dossiers ?

  2. Comment monter ou lier symboliquement un seul fichier dans un conteneur Docker

  3. Aide-mémoire sur les autorisations de fichiers/répertoires Linux

  4. Supprimer un lien symbolique vers un répertoire

  5. Comment RSYNC un seul fichier?

Mise à jour d'un seul fichier dans un tar compressé

Explorer le système de fichiers du conteneur Docker

Docker dans Docker ne peut pas monter le volume

Bash :Aucun fichier ou répertoire de ce type ?

sys/types.h :aucun fichier ou répertoire de ce type

Reprendre le transfert d'un seul fichier par rsync