Quelle est la meilleure façon de partager des fichiers de Windows vers Boot2docker VM?

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 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.

Quel Est votre chemin lorsque vous avez du code sur Windows, mais que vous devez les dockeriser?

---mise à jour---

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

Entrez la description de l'image ici

docker@boot2docker:/$ ls -al /c
total 4
drwxr-xr-x    3 root     root            60 Jun 17 05:42 ./
drwxrwxr-x   17 root     root           400 Jun 17 05:42 ../
dr-xr-xr-x    1 docker   staff         4096 Jun 16 09:47 Users/
29
demandé sur Peter Mortensen 2015-06-16 13:03:40

5 réponses

Boot2Docker est une petite machine virtuelle Linux fonctionnant sur VirtualBox. Donc, avant de pouvoir utiliser vos fichiers (à partir de Windows) dans Docker (qui s'exécute dans cette machine virtuelle), vous devez d'abord partager votre code avec la machine virtuelle Boot2Docker elle-même.

Pour ce faire, vous montez votre dossier Windows sur la machine virtuelle lors de son arrêt (ici un nom de machine virtuelle de default est supposé):

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

(Vous pouvez également ouvrir L'interface utilisateur VirtualBox et monter le dossier sur votre machine virtuelle comme vous l'avez fait dans votre capture d'écran!)

Maintenant ssh dans la machine virtuelle Boot2Docker pour le Terminal de démarrage rapide Docker:

docker-machine ssh default

Ensuite, effectuez le montage:

  1. créez un dossier dans la machine virtuelle: sudo mkdir /VM_share
  2. montez-y le dossier Windows: sudo mount -t vboxsf win_share /VM_share

Après cela, vous pouvez accéder à C:/work dans votre machine virtuelle Boot2Docker:

cd /VM_share

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

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

Ou en l'utilisant lors de la construction de votre image Docker:

...
ADD /my_windows_folder /folder
...

61
répondu Thomas Uhrig 2016-01-24 23:43:16

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

Afin d'avoir vos fichiers sous C:\Users est probablement la chose la plus simple à faire.

Si vous ne voulez pas avoir vos fichiers sous C:\Users, vous devez suivre les étapes de la réponse acceptée .

6
répondu Antony 2017-05-23 12:01:59

En utilisant Docker Toolbox, le répertoire partagé ne peut que être /c/User:

Répertoire non valide. Les répertoires de Volume doivent être sous votre répertoire D'utilisateurs

Entrez la description de l'image ici

Step1 & Step2 commande dans le "Docker Quickstart Terminal" 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
"

Redémarrez ensuite la machine virtuelle. Essayez ceci: docker run --name php-fpm --rm -it -v /e:/var/www/html php:7.1.4-fpm /bin/bash

Références:

0
répondu 王江奥 2018-08-23 21:18:44

Dans la barre D'état système, vous devriez avoir la baleine Docker mignon natation. Faites un clic droit et sélectionnez Paramètres.

Entrez la description de l'image ici

Cliquez sur Appliquer. Cela fera apparaître la boîte de dialogue des informations d'identification et vous devrez fournir vos informations d'identification Windows actuelles. Assurez-vous de le donner correctement. Je soupçonne aussi que vous pourriez avoir besoin d'être un administrateur.

Pour monter notre répertoire hôte (C:\data) dans un conteneur, nous allons utiliser le drapeau -v (volume) pendant l'exécution conteneur. Un exemple d'exécution est montré ici:

Entrez la description de l'image ici

J'ai CentOS dans mon conteneur Docker local.

docker run -v c:/data:/data **centos** ls /data
0
répondu Kumar Abhishek 2018-08-23 21:21:15

Monter le dossier partagé invité Windows avec L'hôte Linux (nom de la machine virtuelle 'par défaut'):

Arrêt de la machine virtuelle par défaut:

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

Ajouter une ligne de commande de dossier partagé:

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

Démarrer la machine virtuelle (interface de ligne de commande sans tête uniquement):

/VBoxManage startvm headless  default

Se Connecter à ssh:

docker-machine ssh default

Créer 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
0
répondu syphax 2018-08-23 21:24:13