2014-04-17 11 views
7

Ich versuche, einen Docker Container zu erstellen, die ein externes Volumen aufweist, die mehrere Ordner enthalten sollten, so meine vereinfachte Version des Dockerfile wie folgt aussieht:Docker Volumes - Automatisches Hinzufügen von Dateien

FROM ubuntu:12.04 

# Create a volume for externally stored data that will persist across containers. 
VOLUME ["/uploads"] 

# Add the subfolders we need if they dont already exist 
# however this never works. 
RUN mkdir /uploads/folder1 
RUN mkdir /uploads/folder2 

Jedes Mal, wenn ich das starten Container mit

sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

Der Ordner/uploads enthält weder Ordner1 noch Ordner2. Allerdings, wenn ich die die VOLUME Uploads Zeile mit einem RUN mkdir /uploads es funktioniert mit diesem Befehl

sudo docker run -i -t [IMAGE ID] /bin/bash 

aber nicht mit diesem Befehl (Ordner fehlen wieder) ersetzen:

sudo docker run -i -t -v /uploads:/uploads [IMAGE ID] /bin/bash 

Wie kann ich einrichten die Docker-Datei, so dass Dateien/Ordner beim Ausführen des Containers automatisch zum gehosteten Host-Verzeichnis hinzugefügt werden?

+0

Dieser Artikel kann dabei helfen: https://jpetazzo.github.io/2015/01/19/dockerfile-and-data-in-volumes/ –

Antwort

9

Wie kann ich die dockerfile, so dass Dateien/Ordner werden automatisch in das Verzeichnis montiert Hosts hinzugefügt bekommen auf der Behälter läuft?

Sie nicht. Dockerfile wird verwendet, um ein Bild zu erstellen, um den Inhalt des Bildes einzurichten. Sie können bis Inhalt Ihres hängten Verzeichnis direkt in der Shell gesetzt:

# create folders: 
mkdir /uploads123 
mkdir /uploads123/folder1 
mkdir /uploads123/folder2 

# run container 
docker run -i -t -v /uploads123:/uploads [IMAGE ID] /bin/bash 

# for this trivial case, you can use directly ubuntu image, 
# it works, no need for Dockerfile 

Alternativ, können Sie einige Setup-Skript festgelegt in Container laufen, bevor der Hauptprozess zu starten. Dieses Setup-Skript kann bereitgestellte Datenträger mit erforderlichen Ordnern füllen.

das Verhalten zu erklären - Ihr Befehl RUN mkdir /uploads/folder1 die Ordner, in dem Bild selbst erstellt, aber Sie beschatteten den Ordner mit montiertem Volumen, so dass Sie diesen Ordner nicht sehen (Ordner im Bild ist, nicht in den Host-Ordnern). Sie können keine Ordner auf einem Volume in Ihrer Docker-Datei erstellen, da das Volume zur Laufzeit zu einem späteren Zeitpunkt (Container) geladen wird.

Verwandte Themen