2014-04-17 22 views
7

Próbuję utworzyć kontener Döcker który ma objętość zewnętrznego, który powinien zawierać kilka folderów, więc moja uproszczona wersja Dockerfile wygląda następująco:dokowane Tomy - pliki automatycznego dodawania

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 

Ilekroć uruchom kontener z

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

Folder/uploads nie zawiera folderu1 ani folderu2. Jednakże, jeśli mogę wymienić linię Przesłane z objętości z RUN mkdir /uploads to działa z tym poleceniem

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

ale nie z tego polecenia (foldery są ponownie brakuje):

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

Jak mogę skonfigurować plik dockerfile, aby pliki/foldery zostały automatycznie dodane do katalogu zamontowanego przez hosta po uruchomieniu kontenera?

+0

Ten artykuł może pomóc w tym: https://jpetazzo.github.io/2015/01/19/dockerfile-and-data-in-volumes/ –

Odpowiedz

9

Jak mogę skonfigurować dockerfile tak, że pliki/foldery będą automatycznie dodawane do katalogu gospodarzy zamontowanych na prowadzenie pojemnik na?

Nie. Dockerfile służy do tworzenia obrazu, aby skonfigurować zawartość obrazu. Można ustawić zawartość swojej zamontowanego katalogu bezpośrednio w powłoce:

# 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 

Alternatywnie, można ustawić jakiś skrypt instalacyjny do pracy w pojemniku przed rozpoczęciem głównego procesu. Ten skrypt instalacyjny może zapełniać zamontowany wolumin wymaganymi folderami.

Aby wyjaśnić zachowanie - Twój polecenia RUN mkdir /uploads/folder1 nie utworzyć folder w obrazie, ale zasłonięta folder z zamontowanym objętości, więc nie widać tego folderu (folder znajduje się na obrazku, a nie w folderze gospodarza). Nie można tworzyć folderów na woluminie w pliku Dockerfile, ponieważ wolumin jest montowany w środowisku wykonawczym później (kontener).