2014-04-17 34 views
7

Sto cercando di creare un contenitore finestra mobile che ha un volume esterno che dovrebbe contenere diverse cartelle, quindi la mia versione semplificata dello Dockerfile si presenta così:Volumi Docker - aggiunta di file automaticamente

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 

Ogni volta che lancio il contenitore con

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

La cartella/uploads non contiene folder1 o folder2. Tuttavia, se si sostituisce la linea arrivi volume con un RUN mkdir /uploads che funziona con questo comando

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

ma non con questo comando (cartelle mancano ancora una volta):

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

Come posso configurare il dockerfile in modo che i file/le cartelle vengano automaticamente aggiunti alla directory montata host dopo l'esecuzione del contenitore?

+0

Questo articolo può aiutare in questo: https://jpetazzo.github.io/2015/01/19/dockerfile-and-data-in-volumes/ –

risposta

9

Come posso impostare la dockerfile modo che i file/cartelle verranno automaticamente aggiunti ai padroni di casa montati su directory in esecuzione il contenitore?

Non è così. Dockerfile viene utilizzato per creare un'immagine, per impostare il contenuto dell'immagine. È possibile impostare il contenuto del vostro directory montata direttamente nella shell:

# 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 

alternativa, è possibile impostare alcuni script di configurazione per l'esecuzione in un contenitore prima di avviare il processo principale. Questo script di installazione può popolare il volume montato con cartelle necessarie.

per spiegare il comportamento - il vostro comando RUN mkdir /uploads/folder1 ha creare la cartella nell'immagine, ma si shadowed la cartella con volume montato, in modo che non si vede questa cartella (cartella è nell'immagine, non nella cartella di accoglienza). Non è possibile creare cartelle sul volume nel Dockerfile, poiché il volume viene montato in fase di esecuzione in un secondo momento (contenitore).

Problemi correlati