web-dev-qa-db-ger.com

Docker: Freigabe eines Volumes unter Windows mit Docker Toolbox

Ich versuche, eine Entwicklerumgebung über einen Docker-Container auf meinem Windows 7-Computer einzurichten.

Ich habe Docker Toolbox für Windows installiert.

Ich habe ein Bild mit Apache und PHP 5.6 und hier ist es:

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

Dieses Image wird erstellt, und ich kann es sehen, wenn ich im Docker-Schnellstart-Terminal "Docker-Images" ausführe.

In meiner Apache-config.conf habe ich nur einen kleinen virtuellen Host, um auf eine Test-Website mit nur einer index.php-Datei zuzugreifen.

Dann versuche ich, den Container im Docker-Schnellstart-Terminal zu erstellen:

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

Ich erhalte folgende Fehlermeldung:

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'

Anscheinend wird meine Volumenoption nicht berücksichtigt. Und der Container wird nicht erstellt.

Was könnte ich falsch machen?

19
jiboulex

Siehe den Hinweis für Windows und Mac unter https://docs.docker.com/engine/userguide/dockervolumes/#mount-a-Host-directory-as-a-data-volume . Insbesondere:

Wenn Sie Docker Machine unter Mac oder Windows verwenden, hat Ihr Docker-Daemon nur eingeschränkten Zugriff auf Ihr OS X- oder Windows-Dateisystem. Docker Machine versucht, das Verzeichnis/Users (OS X) oder C:\Users (Windows) automatisch freizugeben.

Grundsätzlich müssen Sie Ihre Site-Dateien an einen anderen Ort wie c:\Users\sites verschieben und dann mit einem in der Dokumentation vorgeschlagenen Befehl mounten:

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

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

So zeigen Sie freigegebene Ordner an:

VBoxManage showvminfo default | less

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

Schritt 2 (b): Hinzufügen eines Automount zu boot2docker

Wenn Sie an der Maschine angemeldet sind, bearbeiten/erstellen Sie (als root) /mnt/sda1/var/lib/boot2docker/bootlocal.sh, indem Sie den folgenden Block zur Datei hinzufügen.

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

Dann docker-machine restart default

Schritt 3: Hinzufügen eines Volumes beim Ausführen des Containers (Beispiel "Gogs") docker run --name=gogs -rm --net=Host -d -v /fuple:/data gogs/gogs

4
langdead
  • Öffnen Sie "Oracle VM VirtualBox". 
  • Sobald "Standard" ausgewählt ist, klicken Sie auf "Konfiguration". 
  • Gehen Sie zu "Abgeschnittene Ordner" Fügen Sie den gewünschten Ordner hinzu 
  • Starten Sie anschließend default erneut, indem Sie Ihre Konsole eingeben

    neustart der Docker-Maschine

2
Claude Janz

Die Nachricht ist eine "WARNUNG" und keine Fehlermeldung. Sind Sie sicher, dass Ihr Container nicht erstellt wird? Haben Sie mit dem Befehl "docker ps -a" nachgesehen?

Wenn die Nachricht die Hauptursache für Ihr Problem ist, sollten Sie die Nichtexistenz von/var/www/html/test in Ihrem Container herausfinden. Wenn es nicht benötigt wird, sollten Sie es aus der Apache-Konfiguration entfernen (wahrscheinlich in der Datei /etc/Apache2/sites-enabled/000-default.conf oder /etc/Apache2/Apache2.conf).

Wenn/var/www/html/test benötigt wird, können Sie es versuchen und hinzufügen 

RUN mkdir /var/www/html/test

in Ihrer Docker-Datei, um sicherzustellen, dass das Verzeichnis vorhanden ist.

Um zu versuchen, das Problem zu debuggen, möchten Sie möglicherweise versuchen, den Container ohne Verwendung des Volumes auszuführen. Wenn kein Fehler aufgetreten ist, sollten Sie den Container eingeben ("docker exec -it php5.6_container bash"), um das mögliche Problem in Ihrem Container zu debuggen und die Struktur Ihres Containers zu überprüfen.

0
iclman

Ich denke, für Docker-Volumenoptionen sind doppelte Anführungszeichen nicht erforderlich:

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

Überprüfen Sie, ob es funktioniert. Ich bin mir nicht sicher.

Beispiel für Datenträgerzuordnung bei Verwalten von Daten in Containern.

0
Somnath Muluk