web-dev-qa-db-fra.com

Comment utiliser l'option --volume avec Docker Toolbox sous Windows?

Comment partager un dossier entre mes fichiers Windows et un conteneur Docker en montant un volume à l'aide de la simple commande --volume à l'aide de Docker Toolbox on?

J'utilise "Docker Quickstart Terminal" et quand j'essaye ceci:

winpty docker run -it --rm --volume /C/Users/myuser:/myuser ubuntu

J'ai cette erreur:

Invalid value "C:\\Users\\myuser\\:\\myuser" for flag --volume: bad mount mode specified : \myuser
See 'docker run --help'.

Après ceci , j'ai aussi essayé

winpty docker run -it --rm --volume "//C/Users/myuser:/myuser" ubuntu

et j'ai

Invalid value "\\\\C:\\Users\\myuser\\:\\myuser" for flag --volume: \myuser is not an absolute path
See 'docker run --help'.
32
Anthony O.

C’est en fait un numéro du projet } et il existe deux solutions de contournement:

  1. Créer un volume de données:

    docker create -v //c/Users/myuser:/myuser --name data hello-world
    winpty docker run -it --rm --volumes-from data ubuntu
    
  2. SSHing directement dans l'hôte de docker:

    docker-machine ssh default
    

    Et à partir de là faire un classique:

    docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
    
26
Anthony O.

Il s'agit d'une amélioration de la réponse sélectionnée car cette réponse est limitée au dossier c:\Users. Si vous souhaitez créer un volume en utilisant un répertoire en dehors de c:\Users, il s'agit d'une extension.

Dans Windows 7, j'ai utilisé docker toolbox. Il a utilisé Virtual Box. 

  1. Ouvrir une boîte virtuelle
  2. Sélectionnez la machine (par défaut, dans mon cas). 
  3. Faites un clic droit et sélectionnez l'option de configuration
  4. Aller aux dossiers partagés
  5. Inclure un nouveau dossier de machine. 

Par exemple, dans mon cas, j'ai inclus:

**Name**: c:\dev
**Path**: c/dev
  1. Cliquez et fermez
  2. Ouvrez "Docker Quickstart Terminal" et redémarrez le poste de travail. 

Utilisez cette commande:

$ docker-machine restart

Pour vérifier que cela a fonctionné, procédez comme suit:

  1. SSH à la machine de docker.

En utilisant cette commande:

$ docker-machine ssh
  1. Accédez au dossier que vous avez partagé/monté. 

Dans mon cas, j'utilise cette commande

$ cd /c/dev
  1. Vérifiez le propriétaire de l'utilisateur du dossier. Vous pouvez utiliser "ls -all" et vérifier que le propriétaire sera "docker"

Vous verrez quelque chose comme ça:

docker@default:/c/dev$ ls -all
total 92
drwxrwxrwx    1 docker   staff         4096 Feb 23 14:16 ./
drwxr-xr-x    4 root     root            80 Feb 24 09:01 ../
drwxrwxrwx    1 docker   staff         4096 Jan 16 09:28 my_folder/

Dans ce cas, vous pourrez créer un volume pour ce dossier.

Vous pouvez utiliser ces commandes:

docker create -v /c/dev/:/app/dev --name dev image
docker run -d -it --volumes-from dev image

ou

docker run -d -it -v /c/dev/:/app/dev image

Les deux commandes fonctionnent pour moi. J'espère que cela vous sera utile.

42
jmgoyesc

Depuis août 2016, Docker pour Windows utilise maintenant hyper-v directement au lieu de virtualbox, donc je pense que c'est un peu différent. Commencez par partager le lecteur dans les paramètres, puis utilisez le format de lettre de lecteur C:, mais utilisez des barres obliques. Par exemple, j'ai créé un répertoire H:\t\REDIS et j'ai pu le voir monté sur /data dans le conteneur à l'aide de cette commande:

docker run -it --rm -v h:/t/REDIS:/data redis sh

Le même format, utilisant une lettre de lecteur et deux points, puis des barres obliques pour le séparateur de chemin fonctionnait à la fois à partir de la commande windows Invite et de git bash.

J'ai trouvé cette question en train de chercher une réponse sur Google, mais je n'ai rien trouvé qui fonctionne. Les choses sembleraient fonctionner sans erreurs, mais je ne pouvais tout simplement pas voir les données sur l'hôte (ou l'inverse). Enfin, j'ai vérifié les paramètres de près et essayé le format indiqué:

 enter image description here

Donc, tout d’abord, vous devez partager l’ensemble du lecteur avec le paramètre docker vm dans les paramètres ici. Je pense que cela donne à la machine virtuelle «docker-machine» s’exécutant avec un accès hyper-v sur ce lecteur. Ensuite, vous devez utiliser le format indiqué ici, qui ne semble exister que dans cette seule image et dans aucune documentation ou question que je pourrais trouver sur le Web:

docker run --rm -v c:/Users:/data Alpine ls /data
6
Jason Goemaat

Pour ceux qui utilisent Virtual Box qui préfère en ligne de commande approche

1) Assurez-vous que le docker-machine ne fonctionne pas

Docker Quickstart Terminal:

docker-machine stop

2) Créez le partage Windows <-> docker-machine

Invite de commande Windows:
(Modifiez ce qui suit pour correspondre à votre scénario. Je nourris mon conteneur Apache httpd à partir d'un répertoire synchronisé via Dropbox.)

set VBOX=D:\Program Files\Oracle\VirtualBox\VBoxManage.exe
set VM_NAME=default
set NAME=c/htdocs
set HOSTPATH=%DROPBOX%\htdocs
"%VBOX%" sharedfolder add "%VM_NAME%" --name "%NAME%" --hostpath "%HOSTPATH%" --automount

3) Démarrer le docker-machine et monter le volume dans un nouveau conteneur

Docker Quickstart Terminal:
(Encore une fois, je commence un conteneur Apache httpd, d’où le port exposé.)

docker-machine start
docker run -d --name my-Apache-container-0 -p 80:80 -v /c/htdocs:/usr/local/Apache2/htdocs my-Apache-image:1.0
3
Jaroslav Záruba

Si vous recherchez une solution qui résoudra tous les problèmes de Windows et fonctionnera sous le système d'exploitation Windows de la même manière que sous Linux, reportez-vous à la section ci-dessous. J'ai testé cela et cela fonctionne dans tous les cas. Je montre aussi comment je l’obtiens (les étapes et le processus de réflexion). J'ai également écrit un article sur l'utilisation de Docker et le traitement des problèmes liés au menu fixe ici.

Solution 1: Utilisez VirtualBox (si vous pensez que ce n'est pas une bonne idée, voir la solution 2 ci-dessous)

  • Ouvrez VirtualBox (vous l'avez déjà installé avec les outils de menu fixe)
  • Créer une machine virtuelle 
  • (Ceci est facultatif, vous pouvez l'ignorer et transférer les ports de la machine virtuelle.) Créez une deuxième carte Ethernet - pontée, afin qu'elle reçoive une adresse IP de votre réseau (il aura l'adresse IP comme machine de docker)
  • Installez Ubuntu LTS qui a plus d'un an
  • Installer le docker 
  • Ajoutez des répertoires partagés à la machine virtuelle et montez automatiquement vos répertoires de projet (de cette façon, vous aurez accès au répertoire du projet à partir d'Ubuntu), mais pourrez toujours fonctionner sous Windows.
  • Terminé

Prime:

  • Tout fonctionne de la même manière que sous Linux
  • Pause/Unpause l'environnement dockerized quand vous voulez

Solution 2: Utilisez VirtualBox (ceci est très similaire à la solution 1 mais montre également le processus de réflexion qui peut être utile pour résoudre des problèmes similaires)

  • Lisez que quelqu'un déplace les dossiers vers/C/Utilisateurs/Public et que cela fonctionne https://forums.docker.com/t/sharing-a-volume-on-windows-with-docker-toolbox/4953/2
  • Essayez-le, sachez que cela n’a pas beaucoup de sens dans votre cas.
  • Lisez la page entière ici https://github.com/docker/toolbox/issues/607 et essayez toutes les solutions listées à la page
  • Trouvez cette page (celle que vous lisez actuellement) et essayez toutes les solutions d'autres commentaires.
  • Trouvez quelque part des informations selon lesquelles la définition de la variable d'environnement COMPOSE_CONVERT_WINDOWS_PATHS = 1 peut résoudre le problème.
  • Ne cherchez plus la solution pendant quelques mois
  • Revenez en arrière et vérifiez à nouveau les mêmes liens
  • Pleure profondément
  • Ressentez le moment des Lumières
  • Ouvrez VirtualBox (vous l'avez déjà installé avec les outils de menu fixe)
  • Créer une machine virtuelle avec une deuxième carte Ethernet - pontée, de cette manière, il recevra l'adresse IP de votre réseau (il aura une adresse IP semblable à celle d'une machine docker)
  • Installez Ubuntu LTS qui est très récent (pas plus vieux que quelques mois)
  • Notez que le montage automatique ne fonctionne pas vraiment et que l'intégration est interrompue (comme le partage du presse-papiers, etc.)
  • Supprimer la machine virtuelle
  • Sortir boire un verre
  • Louez une voiture chère et partez à grande vitesse sur l'autoroute
  • Détruire la voiture et mourir
  • Respawn devant votre PC
  • Installez Ubuntu LTS qui a plus d'un an
  • Essayez de lancer docker
  • Notez que ce n’est pas installé
  • Installer le menu fixe à l'aide du menu d'installation apt-get
  • Installer le fichier docker.io suggéré
  • Essayez de lancer docker-compose
  • Notez que ce n’est pas installé
  • apt get install docker-compose
  • Essayez de lancer votre projet avec docker-compose
  • Notez que c’est l’ancienne version
  • Vérifiez votre niveau de puissance (il devrait être plus de 9000)
  • Rechercher comment installer la dernière version de docker et trouver le guide officiel https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Désinstallez les versions actuelles de docker-compose et docker.io
  • Installez docker en utilisant le guide officiel https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Ajoutez des répertoires partagés à la machine virtuelle et montez automatiquement vos répertoires de projet (vous avez ainsi accès au répertoire du projet à partir d'Ubuntu, de sorte que vous puissiez exécuter n'importe quelle commande de docker).
  • Terminé
2
Grzegorz Gajos

dossiers de partage boîte à outils virtualBox et conteneur d'images Windows 7 et nodejs

utilisation de ... Docker Quickstart Terminal [QST] Explorateur Windows [WE]

commençons...

  1. [QST] ouvrir le terminal Docker Quickstart

  2. [QST] arrêter la machine virtuelle

$ arrêt docker-machine

  1. [WE] ouvre un explorateur de fenêtres

  2. [WE] aller au répertoire d'installation de virtualBox 

  3. [WE] ouvrir un cmd et exécuter ...

C:\Programmes\Oracle\VirtualBox> VBoxManage sharedfolder ajoute "default" --name "/ D/SVN_FOLDERS/X2R2_WP6/nodejs" --hostpath "\?\D:\SVN_FOLDERS\X2R2_WP6\nodejs" - montage automatique

  1. vérifier dans la machine virtuelle Oracle que le nouveau dossier partagé est apparu

  2. [QST] démarrer machine virtuelle

$ docker-machine start

  1. [QST] lance le noeud de conteneur

docker stop nodejs

docker rm nodejs

docker run -d -it --rm --name nodejs -v/d/SVN_FOLDERS/X2R2_WP6/nodejs:/usr/src/app -w/usr/src/app node2

  1. [QST] ouvrir bash au conteneur

docker exec -i -t nodejs/bin/bash

  1. [QST] exécutez dir et vous verrez les fichiers partagés
0
ivan rc

L'utilisation de doubles barres obliques doubles a fonctionné pour moi sous Windows 7:

docker run --rm -v //c/Users:/data Alpine ls /data/

Tiré d'ici: https://github.com/moby/moby/issues/12590

0
Kirill

Je l'ai résolu!

Ajouter un volume:

docker exécuter -d -v mon-nom-volume: C:\MyNamedVolume testimage: last

Monter un répertoire d'hôte:

docker exécuter -d -v C:\Temp\123: C:\Mon\Partagé\Dir testimage: dernière

0
Hugo Kokay