134 votes

Essayez-vous de monter un répertoire sur un fichier (ou vice-versa) ?

J'ai un docker avec la version 17.06.0-ce . Lorsque j'essaie d'installer NGINX en utilisant docker avec la commande :

docker run -p 80:80 -p 8080:8080 --name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx:latest

Il montre que

docker : Réponse d'erreur du démon : oci runtime error : container_linux.go:262 : starting container process caused "process_linux.go:339 : container init caused" "rootfs_linux.go:57 : mounting \\ "/appdata/nginx/conf/nginx.conf \\ "vers rootfs \\ "/var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\ " sur \\ "/var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0/etc/nginx/nginx.conf \\ " a causé \\ "pas un répertoire \\ "\"" : Essayez-vous de monter un répertoire sur un fichier (ou vice-versa) ? Vérifiez si le chemin d'accès de l'hôte spécifié existe et s'il est du type attendu.

Si vous ne montez pas le nginx.conf fichier, tout va bien. Alors, comment puis-je monter le fichier de configuration ?

0 votes

Quelle est la sortie de ls -al . ? Je veux voir à quoi ressemble votre pwd.

1 votes

Dans mon cas, j'avais accidentellement mappé un répertoire de l'hôte vers un fichier dans le conteneur. Le redémarrage du conteneur n'a plus fonctionné. J'ai dû supprimer le conteneur ( docker rm … ), puis le recréer.

152voto

Jesse Webb Points 8015

Cela ne devrait plus se produire (depuis la v2.2.0.0), cf. aquí


Si vous utilisez Docker pour Windows Cette erreur peut se produire si vous avez récemment changé votre mot de passe.

Comment réparer :

  1. Assurez-vous d'abord de supprimer le volume du conteneur cassé.
    docker rm -v <container_name>
    Mise à jour : les étapes ci-dessous peuvent fonctionner sans qu'il soit nécessaire de supprimer les volumes au préalable.
  2. Ouvrir les paramètres de Docker
  3. Allez dans l'onglet "Shared Drives".
  4. Cliquez sur le lien "Reset Credentials..." en bas de la fenêtre.
  5. Re-partagez les disques que vous voulez utiliser avec Docker.
  • Il vous sera demandé de saisir votre nom d'utilisateur/mot de passe.
  1. Cliquez sur "Appliquer".
  2. Allez dans l'onglet "Reset".
  3. Cliquez sur "Redémarrer Docker".
  4. Recréer vos conteneurs/volumes

Le crédit revient à BaranOrnarli sur GitHub pour la solution.

2 votes

Merci ! Cela fonctionne pour moi à partir de la deuxième étape et en évitant la dernière.

1 votes

J'ai pu résoudre le problème en commençant par l'étape 2 et en omettant la dernière. Je n'ai pas eu à détruire les conteneurs/volumes pour les remonter.

0 votes

Je suis d'accord avec @MateoHermosilla, il n'est pas nécessaire de détecter le conteneur, seulement "Reset Credentials".

77voto

Ayushya Points 2080

TL;DR : Supprimer les volumes associés au conteneur.

Trouvez le nom du conteneur en utilisant docker ps -a puis retirer ce conteneur en utilisant :

docker rm -v <container_name>

Problème :

L'erreur que vous rencontrez peut se produire si vous avez précédemment essayé d'exécuter la commande docker run alors que la commande fichier n'était pas présent à l'endroit où il aurait dû être dans le répertoire de l'hôte.

Dans ce cas, le démon docker aurait créé une répertoire à l'intérieur du conteneur à sa place, ce qui ne permet pas de mapper vers le bon fichier lorsque les bons fichiers sont placés dans le répertoire hôte et que la commande docker est exécutée à nouveau.

Solution :

Supprimez les volumes qui sont associés au conteneur. Si vous n'êtes pas concerné par les autres volumes du conteneur, vous pouvez également utiliser :

docker volume rm $(docker volume ls -q)

0 votes

La commande dans la question originale ne listait que les volumes hôtes utilisés. Le site docker volume La commande/interface ne concerne que les volumes anonymes et nommés, qui ne font pas partie de la question initiale.

0 votes

@programmerq Regardez l'erreur, elle indique que le montage a échoué lorsqu'il a essayé de monter dans l'emplacement suivant /var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfa‌​da06947385aedc2ac09f‌​199188fa0\\\" Ma déduction : Il a déjà un dossier en raison d'une exécution précédente, donc si vous essayez de mapper un fichier à ce dossier, il échouera.

0 votes

Ici, deux choses peuvent avoir mal tourné, soit l'hôte a des choses incorrectes, soit le volume déjà créé a des choses incorrectes. En supposant que l'hôte est correct, j'ai pensé qu'il serait préférable de résoudre les problèmes avec le volume existant.

40voto

Parce que docker reconnaîtra $PWD/conf/nginx.conf en tant que dossier et non comme un fichier. Vérifiez si le $PWD/conf/ Le répertoire contient nginx.conf en tant que répertoire .

Test avec

> cat $PWD/conf/nginx.conf 
cat: nginx.conf/: Is a directory

Sinon, ouvrez un Problème de Docker .
Cela fonctionne bien pour moi avec la même configuration.

1 votes

En tant qu'utilisateur de Linux de niveau intermédiaire, je suis curieux de savoir pourquoi Linux reconnaît ce fichier comme un dossier et non comme un fichier.

2 votes

Parce que c'est en fait un dossier. Si le fichier n'existe pas, docker crée un dossier à cause de l'argument du volume. -v

2 votes

Ok, donc Linux ne le reconnaît comme un dossier que si Docker a dû le créer parce que le chemin n'existait pas auparavant ; mais si la balise nginx.conf existait déjà à cet endroit, Linux le reconnaîtrait comme un fichier, non ?

6voto

webcu Points 21

J'ai eu le même problème. J'utilisais Docker Desktop avec WSL dans Windows 10 17.09.

Cause du problème :

Le problème est que Docker pour Windows s'attend à ce que vous fournissiez vos chemins de volume dans un format qui correspond à celui-ci :

/c/Users/username/app

MAIS, la WSL utilise plutôt le format :

/mnt/c/Users/username/app

C'est déroutant car en vérifiant le fichier dans la console, je l'ai vu, et pour moi tout était correct. Je n'étais pas au courant des attentes de Docker pour Windows concernant le fichier voies de volume .

Solution au problème :

J'ai lié les points de montage personnalisés pour corriger les différences entre Docker pour Windows et WSL :

sudo mount --bind /mnt/c /c

Comme suggéré dans ce guide étonnant : Configuration de Docker pour Windows et WSL pour un fonctionnement parfait et tout fonctionne parfaitement maintenant.

Avant de commencer à utiliser WSL, j'utilisais Git Bash et j'avais également ce problème.

1 votes

4voto

Abhishek D K Points 323

J'utilise Docker ToolBox pour Windows. Par défaut C Drive est monté automatiquement, donc afin de monter les fichiers, assurez-vous que vos fichiers et dossiers sont à l'intérieur de C DRIVE .

Exemple : C:\Users\%USERNAME%\Desktop

1 votes

Mon dossier monté est C:\x -J'ai partagé mon disque C mais je n'ai toujours pas résolu mon problème.

0 votes

Utilisez-vous Docker ToolBox ?

0 votes

Minikube+virtualBox+docker ToolBox , localkube a été déprécié, quel pilote dois-je utiliser ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X