I volumi nominati verranno archiviati nella cartella della finestra mobile (/var/lib/docker). Se desideri creare un volume in una cartella host specifica, utilizza un volume host con la seguente sintassi:
docker run -v /home/ubuntu/data/app-data:/app-data my-image
O dal tuo file di composizione:
version: '2'
services:
mongo:
container_name: "CaseBook-db"
restart: always
image: mongo:3.2.7
ports:
- "27017"
volumes:
- /home/ubuntu/data/db:/data/db
labels:
- "ENVIRONMENT_TYPE=meteor"
app:
container_name: "CaseBook-app"
restart: always
image: "meteor/casebook"
build: .
depends_on:
- mongo
environment:
- MONGO_URL=mongodb://mongo:27017/CaseBook
ports:
- "80:3000"
volumes:
- /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
labels:
- "ENVIRONMENT_TYPE=meteor"
Con i volumi host, qualsiasi contenuto del volume all'interno dell'immagine verrà sovrapposto al contenuto esatto della cartella host, inclusi gli UID della cartella host. Una cartella host vuota non viene inizializzata dall'immagine come lo è un volume con nome vuoto. Le mappature UID tendono a essere la parte più difficile dell'utilizzo di un volume host.
Modifica:dai commenti qui sotto, se hai bisogno di un volume denominato che funge da volume host, c'è un plug-in del volume persistente locale elencato nell'elenco dei plug-in della finestra mobile. Dopo aver installato il plug-in, puoi creare volumi che puntino a cartelle host, con la caratteristica che anche dopo aver rimosso il volume denominato, la directory host viene lasciata indietro. L'utilizzo di esempio dal plug-in include:
docker volume create -d local-persist -o mountpoint=/data/images --name=images
docker run -d -v images:/path/to/images/on/one/ one
docker run -d -v images:/path/to/images/on/two/ two
Includono anche un file di composizione v2 con il seguente esempio di volume:
volumes:
data:
driver: local-persist
driver_opts:
mountpoint: /data/local-persist/data
Un'opzione aggiuntiva di cui sono stato informato nell'ultimo mese è quella di utilizzare le opzioni di montaggio del driver del volume locale per creare manualmente un montaggio vincolato. È simile a un volume host nella finestra mobile con le seguenti differenze:
- Se la directory non esiste, il tentativo di avviare un container con un volume denominato che punta a un montaggio bind non riuscirà. Con i volumi host, Docker lo inizializzerà su una directory vuota di proprietà di root.
- Se la directory è vuota, un volume denominato inizializzerà il montaggio di collegamento con il contenuto dell'immagine nella posizione di montaggio, inclusi i permessi/proprietà di file e directory. Con un volume host, non c'è inizializzazione del contenuto della directory host.
Per creare un volume denominato come montaggio vincolato, puoi crearlo in anticipo con:
docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
Da un docker run
comando, questo può essere fatto con --mount
:
docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
foo
Oppure in un file di composizione, puoi creare il volume denominato con:
volumes:
data:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
La mia preferenza sarebbe quella di utilizzare il volume con nome con il driver locale invece del driver di terze parti persistente in locale se hai bisogno delle funzionalità del volume con nome.