MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Docker:cambia la cartella in cui archiviare i volumi della finestra mobile

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.