web-dev-qa-db-fra.com

Quel est le meilleur moyen de partager des fichiers de Windows vers la machine virtuelle Boot2docker?

J'ai préparé mon code sous Windows, mais je trouve que ce n'est pas facile à partager avec boot2docker.

Je trouve aussi que boot2docker ne peut pas persister dans mes modifications. Par exemple, je crée un dossier, /temp, après avoir redémarré boot2docker. Ce dossier disparaît et c'est très gênant.

Quelle est votre méthode lorsque vous avez du code sous Windows, mais que vous avez besoin de le dockeriser?

---mettre à jour---

J'essaie de mettre à jour le paramètre dans VirtualBox et de redémarrer boot2docker, mais cela ne fonctionne pas sur ma machine.

Enter image description here

 docker @ boot2docker:/$ ls -al /c
total 4 
 drwxr-xr-x 3 racine racine 60 juin 17 05h42 ./
drwxrwxr-x 17 racine racine 400 juin 17 05:42 ../
dr-xr-xr-x 1 membre du personnel de docker 4096 16 juin 09:47 Utilisateurs /
30
yuyue007

Boot2Docker est un petit Linux VM fonctionnant sur VirtualBox. Par conséquent, avant de pouvoir utiliser vos fichiers (sous Windows) dans Docker (qui s'exécute dans cette machine virtuelle), vous devez d'abord partager votre code avec le Boot2Docker VM lui-même. 

Pour ce faire, vous montez votre dossier Windows sur VM lorsqu'il est arrêté (dans ce cas, un VM nom de default est utilisé):

C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder \
add default -name win_share -hostpath c:/work

(Vous pouvez également ouvrir l'interface utilisateur de VirtualBox et monter le dossier sur votre VM exactement comme vous l'avez fait sur votre capture d'écran!)

Maintenant, ssh dans Boot2Docker VM pour le terminal Docker Quickstart:

docker-machine ssh default

Puis effectuez le montage:

  1. Créez un dossier dans la VM: Sudo mkdir /VM_share
  2. Montez le dossier Windows sur celui-ci: Sudo mount -t vboxsf win_share /VM_share

Ensuite, vous pourrez accéder à C:/work sur votre machine virtuelle Boot2Docker:

cd /VM_share

Maintenant que votre code est présent dans votre VM, vous pouvez l’utiliser avec Docker, soit en le montant en tant que volume sur le conteneur:

docker-machine ssh default
docker run --volume /VM_share:/folder/in/container some/image

Ou en l'utilisant lors de la création de votre image Docker:

...
ADD /my_windows_folder /folder
...

63
Thomas Uhrig

Voir cette réponse .

J'ai Windows 10 Home Edition avec Docker Toolbox 1.12.2 et VirtualBox 5.1.6.

J'ai pu monter un dossier sous C:\Users avec succès dans mon conteneur sans effectuer d'étapes supplémentaires telles que docker-machine ssh default.

Exemple:

docker run -it --rm -v /c/Users/antonyj/Documents/code:/mnt ubuntu /bin/bash

Donc, avoir vos fichiers sous C:\Users est probablement la chose la plus simple à faire.

Si vous ne souhaitez pas que vos fichiers soient sous C:\Users, vous devez suivre les étapes décrites dans la réponse acceptée .

7
Antony

Monter l'invité Windows du dossier partagé avec l'hôte Linux (nom vm 'par défaut'):

Arrêter la VM 'par défaut':

cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage controlvm default poweroff

Ajouter la ligne de commande du dossier partagé:

./VBoxManage sharedfolder add default -name win_share -hostpath "C:\docker\volumes"

Démarrez VM (interface de ligne de commande sans tête uniquement):

/VBoxManage startvm headless  default

Se connecter à ssh:

docker-machine ssh default

Créez le répertoire VM sharedfolder:

Sudo mkdir /sharedcontent

Monter le dossier Windows sur la machine virtuelle hôte:

Sudo mount -t vboxsf win_share /sharedcontent
1
syphax

À l'aide de Docker Toolbox, le répertoire partagé peut uniquement être /c/User:

Répertoire invalide. Les répertoires de volume doivent être sous votre répertoire Utilisateurs

Entrez la description de l'image ici

Step1 & Step2 La commande dans le "Terminal Docker Quickstart" dans la mise en œuvre de Step1 & Step2 peut être:

# Step 1. VirtualBox. Add the error in the command line, in the VirtualBox image interface manually add, as shown above.
"C:/Program Files/Oracle/VirtualBox/VBoxManage.exe" sharedfolder add default --name "E_DRIVE" --hostpath "e:\\" --automount

# Try 1. Only a temporary effect. Restart VM after sharing failure.
#docker-machine ssh default "Sudo mkdir -p /e" # Create a directory identifier, consistent with the Windows drive letter
#docker-machine ssh default "Sudo mount -t vboxsf -o uid=1000,gid=50 E_DRIVE /e"

# Try 2. Modify /etc/fstab. Do not use the permanent mount. Each restart /etc/fstab content will be reset
#docker-machine ssh default "Sudo sed -i '$ a\E_DRIVE /e vboxsf uid=1000,gid=50 0 0' /etc/fstab"

# Step 2. `C:\Program Files\Docker Toolbox\start.sh` https://github.com/docker/machine/issues/1814#issuecomment-239957893
docker-machine ssh default "cat <<EOF | Sudo tee /var/lib/boot2docker/bootlocal.sh && Sudo chmod u+x /var/lib/boot2docker/bootlocal.sh
#!/bin/sh
mkdir -p /e
mount -t vboxsf -o uid=1000,gid=50 E_DRIVE /e
EOF
"

Puis redémarrez la VM. Essayez ceci: docker run --name php-fpm --rm -it -v /e:/var/www/html php:7.1.4-fpm /bin/bash

Références:

1
王江奥