Ich habe ein, Dockerfile
wo ich ein vorhandenes Verzeichnis (mit Inhalt) in den Container kopiere, was gut funktioniert:
Dockerfile
FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/
RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Aber wenn ich eine docker-compose.yml
Datei benutze , gibt es nur das Verzeichnis aw3somevideo
und darin aw3somevideo
ist nichts.
docker-compose.yml :
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Vielleicht verstehe ich die Funktion von nicht volumes
und wenn dies der Fall ist, sagen Sie mir bitte, wie ich meine vorhandenen Dateien über eine docker-compose.yml
Datei in den Container kopieren soll .
docker
copy
docker-compose
volumes
Der Doktor
quelle
quelle
volumes:
Abschnitt aus Ihrer Docker-Compose-Datei. Ihr Bild enthält bereits die Daten. Der Abschnitt volume: überschreibt nur die Daten. Wechseln Sie auch zum aktuellen Docker-Compose-Format (Version 2).Antworten:
Gegeben
Wenn
/dir/on/host
es nicht vorhanden ist, wird es auf dem Host erstellt und der leere Inhalt wird im Container unter bereitgestellt/var/www/html
. Auf den Inhalt, den Sie zuvor im/var/www/html
Container hatten, kann nicht zugegriffen werden, bis Sie das Volume aushängen. Das neue Mount versteckt den alten Inhalt.quelle
var/www/html/
nicht mehr kopiert wird,/dir/on/host
auch wenn er nicht existiert? Gibt es eine Möglichkeit, das Kopieren der Daten aus dem Docker-Container auf den Host zu erzwingen, wenn ein Container zum ersten Mal gestartet wird?docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"
. Vergessen Sie nicht,exec
den letzten Befehl so aufzurufen, dass ihm PID1 zugewiesen wird. Dadurch wird sichergestellt, dass myapp Beendigungssignale empfängt (z. B. Strg-C).