web-dev-qa-db-fra.com

Docker: Partage d'un volume sous Windows avec Docker Toolbox

J'essaie de configurer un environnement de développement via un conteneur Docker sur mon ordinateur Windows 7.

J'ai installé la boîte à outils Docker pour Windows.

J'ai une image avec Apache et PHP 5.6 à l'intérieur, et la voici:

FROM php:5.6.15-Apache

RUN apt-get update && apt-get install -y \
apt-utils vim git php5-mysql php5-memcache php5-memcached php5-intl \
wget
RUN apt-get install libapache2-mod-php5 -y -o Dpkg::Options::="--force-confdef"
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get install libcurl4-gnutls-dev -y
RUN docker-php-ext-install curl
RUN a2enmod rewrite

ENV Apache_RUN_USER myname
ENV Apache_RUN_GROUP www-data
ENV Apache_LOG_DIR /var/log/Apache2
ENV Apache_LOCK_DIR /var/lock/Apache2
ENV Apache_PID_FILE /var/run/Apache2.pid

EXPOSE 80

COPY php.ini /usr/local/etc/php/php.ini
COPY Apache-config.conf /etc/Apache2/sites-enabled/000-default.conf
RUN echo "ServerName 127.0.1.1" >> /etc/Apache2/Apache2.conf

Cette image est créée et je peux la voir lorsque je lance des "images de menu fixe" dans le terminal de démarrage rapide de Docker.

Dans mon Apache-config.conf, je viens d'avoir un petit hôte virtuel pour accéder à un site Web de test avec juste un fichier index.php.

Ensuite, j'essaie de créer le conteneur dans le terminal Docker quickstart:

docker run --name=php5.6_container --rm -v "//c/sites:/var/www/html" -p 80:80 -p 8080:8080 php5.6

Je reçois l'erreur suivante:

AH00112: Warning: DocumentRoot [/var/www/html/test] does not exist
AH00112: Warning: DocumentRoot [/var/www/html/test] does not exist
[Tue Dec 08 16:36:37.703143 2015] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) configured -- resuming normal operations
[Tue Dec 08 16:36:37.703733 2015] [core:notice] [pid 1] AH00094: Command line: '
Apache2 -D FOREGROUND'

Il semble que mon option de volume n’est pas prise en compte. Et le conteneur n'est pas créé.

Que pourrais-je faire de mal?

19
jiboulex

Voir la note pour Windows et Mac à l’adresse https://docs.docker.com/engine/userguide/dockervolumes/#mount-a-Host-directory-as-a-data-volume . Particulièrement:

Si vous utilisez Docker Machine sur Mac ou Windows, votre démon Docker n'a qu'un accès limité à votre système de fichiers OS X ou Windows. Docker Machine essaie de partager automatiquement votre répertoire/Users (OS X) ou C:\Users (Windows).

Fondamentalement, vous devrez déplacer les fichiers de votre site vers un emplacement tel que c:\Users\sites, puis monter en utilisant quelque chose du type suggéré dans la documentation:

docker run --name=php5.6_container --rm -v "/c/Users/sites:/var/www/html" -p 80:80 -p 8080:8080 php5.6
53
Andy Shinn

Étape 1: C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder add default -name $shared_folder -hostpath d:/data

Pour afficher les dossiers partagés:

VBoxManage showvminfo default | less

Étape 2 (a): mount -t vboxsf -o uid=1000,gid=50 $shared_folder /data

Étape 2 (b): Ajouter un montage automatique à boot2docker

Lorsque vous êtes connecté à la machine, éditez/créez (en tant que root) /mnt/sda1/var/lib/boot2docker/bootlocal.sh en ajoutant un bloc au fichier, sda1 peut être différent pour vous ...

mkdir -p /data mount -t vboxsf -o uid=1000,gid=50 $shared_folder /data

Alors, docker-machine restart default

Étape 3: Ajout d’un volume lors de l’exécution du conteneur (exemple de gogs) docker run --name=gogs -rm --net=Host -d -v /fuple:/data gogs/gogs

4
langdead
  • Ouvrez "Oracle VM VirtualBox" 
  • Une fois que "défaut est sélectionné" cliquez sur "configuration" 
  • Allez à "Dossiers cisaillés" Ajouter le dossier désiré 
  • Puis redémarrez default en tapant dans votre console

    redémarrage docker-machine par défaut

2
Claude Janz

Le message est un "AVERTISSEMENT" et non un message d'erreur. Êtes-vous sûr que votre conteneur n'est pas créé? Avez-vous vérifié avec la commande "docker ps -a"?

Si le message est la cause première de votre problème, vous devez corriger la non-existence de/var/www/html/test dans votre conteneur. S'il n'est pas nécessaire, vous devez le supprimer de la configuration Apache (probablement dans le fichier /etc/Apache2/sites-enabled/000-default.conf ou /etc/Apache2/Apache2.conf).

Si/var/www/html/test est nécessaire, vous pouvez essayer d’ajouter 

RUN mkdir /var/www/html/test

dans votre fichier Docker afin de vous assurer que le répertoire existe.

En outre, pour essayer de résoudre le problème, vous pouvez essayer d'exécuter le conteneur sans utiliser le volume. S'il n'y a pas d'erreur, vous devez alors entrer dans le conteneur ("docker exec -it php5.6_container bash") afin de résoudre le problème potentiel dans votre conteneur et de vérifier la structure de votre conteneur.

0
iclman

Je pense que pour les options de volume Docker, les guillemets doubles ne sont pas obligatoires:

docker run --name=php5.6_container --rm -v //c/sites:/var/www/html -p 80:80 -p 8080:8080 php5.6

Vérifiez si cela fonctionne. Je ne suis pas sûr.

Voir l'exemple de mappage de volume sur Gestion des données dans des conteneurs.

0
Somnath Muluk