2017-05-05 4 views
4

Ich habe eine Dockerfile, die einige Dateien in den Container kopiert und danach ein VOLUME erstellt.Docker Dateien zu VOLUME hinzufügen

... 
ADD src/ /var/www/html/ 
VOLUME /var/www/html/files 
... 

Im src Ordner ist ein Ordner Dateien und in diesen Dateien Ordner einige Dateien Ich brauche die Container gestartet werden zum ersten Mal auf den Datenträger kopiert haben.

Ich dachte, das erste Mal, wenn der Container erstellt wird, wird der Inhalt des ursprünglichen Verzeichnisses verwendet, das im Volume angegeben ist. Dies ist jedoch nicht der Fall.

Also wie bekomme ich die Dateien in diesen Ordner? Muss ich einen zusätzlichen Ordner erstellen und ihn mit einem Script kopieren (hoffe ich nicht)?

+0

Es sollte funktionieren und 200% sicher sein, dass ich es gerade getestet habe. Der einzige Fall, in dem es nicht wie erwartet funktionieren würde, ist, wenn Sie '-v/pfad/zu/einige/directory:/var/www/...' in docker-run oder docker-compose verwenden. –

Antwort

4

Was auch immer Sie in Ihrem Dockerfile gestellt wird nur bei Kompilierzeit ausgewertet (und nicht, wenn Sie Schaffung ein neuer Behälter sind).

Wenn Sie Datei vom Host in Ihrem Behälter machen ein verwenden data volume:

docker run -v /host_dir:/container_dir ... 

Falls Sie wollen einfach nur Dateien in einen Container vom Host kopieren als eine einmalige Operation können Sie Verwenden Sie:

docker cp /host_dir mycontainer:/container_dir 
+0

Ich möchte die Dateien zur Build-Zeit hinzufügen, damit ich die ersten Dateien im Ordner habe. Aber ich möchte diesen Ordner dann meinem Host über ein Datenvolumen zur Verfügung stellen. Daher sollten die anfänglichen Dateien in das Datenvolumen eingefügt werden. Ich kann die Dateien über ein Startskript im Container kopieren, aber ich hoffe, dass es eine elegantere Lösung gibt. Wenn nicht, werde ich es über das Skript tun –

1

Das Problem ist mit Ihrer ADD-Anweisung. Möglicherweise verstehen Sie auch nicht, wie auf Volumes zugegriffen wird. Vergleichen Sie Ihre Bemühungen mit der Demo unter:

FROM alpine #, or your favorite tiny image 
ADD src/files /var/www/html/files 
VOLUME /var/www/html/files 

ein Bild Bauen namens 'dataimg':

docker build -t dataimg . 

die dataimg Bild Verwenden Sie einen Datencontainer 'datacon' genannt zu erstellen:

docker run --name datacon dataimg /bin/cat 

Montieren Sie das Volume von DataCon in Ihrem Nginx-Container:

docker run --volumes-from datacon nginx ls -la /var/www/html/files 

Und Sie sehen die Auflistung von/var/www/html/files spiegelt den Inhalt von src/files