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.