Docker: crea un volume persistente in una directory specifica


13

Devo creare un volume persistente per Docker. Il volume deve essere nominato extra-addonse situato in /mnt/.

Eseguo questo comando:

sudo docker volume create /mnt/extra-addons

Ho ricevuto questo messaggio di errore:

Error response from daemon: create /mnt/extra-addons: "/mnt/extra-addons" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path

Si noti che quando eseguo semplicemente:, sudo docker volume create extra-addonsnon ho riscontrato questo problema ma quando controllo il volume in questione utilizzando sudo docker inspect extra-addons, vedo che si trova in un posto che non voglio:

[
    {
        "CreatedAt": "2018-04-21T14:40:25+03:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/extra-addons/_data",
        "Name": "extra-addons",
        "Options": {},
        "Scope": "local"
    }
]

Voglio dire, preferisco vedere il volume in questo modo: /mnt/extra-addons

Qualche idea?

Risposte:


11

Ho trovato la soluzione:

Ho dovuto installare un plugin local-persist .

Ho dovuto montare il volume per creare il mount point come segue:

 sudo docker volume create -d local-persist -o mountpoint=/mnt/ --name=extra-addons

Controlla se ho ottenuto quello che mi aspettavo:

sudo docker volume inspect extra-addons

Risultato:

[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local-persist",
        "Labels": {},
        "Mountpoint": "/mnt/",
        "Name": "extra-addons",
        "Options": {
            "mountpoint": "/mnt/"
        },
        "Scope": "local"
    }
]

Questo è quello che sto cercando.


6

Se non si desidera installare alcun plug-in sulla finestra mobile, si consiglia di creare un collegamento simbolico per il volume:

$ docker volume create <myVolume>
$ docker volume inspect <myVolume> 
[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/<myVolume>/_data",
        "Name": "<myVolume>",
        "Options": {},
        "Scope": "local"
    }
]
$ mkdir /mnt/<myVolume>
# if you already have data in your volume, you should copy it to `/mnt/<myVolume>` now
$ sudo rm -rf /var/lib/docker/volumes/<myVolume>/_data
$ sudo ln -s /mnt/<myVolume> /var/lib/docker/volumes/<myVolume>/_data

Ora sentiti libero di usare il tuo volume come al solito (con tutti i tuoi dati inseriti /mntcome volevi)


Non pensare che sia una buona idea eliminare i volumi gestiti dalla finestra mobile. Utilizzare invece un mount per montare una directory host nella finestra mobile.
Lex,

3

Non penso che usare il local-persistdriver sia la strada da percorrere. Non è stato aggiornato da un po '. È possibile montare una directory locale (host) in un contenitore docker utilizzando il docker mount.

L'esecuzione di quanto segue crea un nuovo contenitore con una directory montata mappata sul mio desktop.

mkdir extra-addons
docker run -it -v /Users/me/Desktop/extra-addons:/mnt/extra-addons busybox /bin/sh
ls

Ora puoi vedere una mntcartella nella radice del tuo contenitore.

bin dev etc home mnt proc root sys tmp usr var

Creazione di un nuovo file nel contenitore

touch /mnt/extra-addons/test.txt

Crea un file test.txt sul mio computer host. Nel percorso specificato. Questa è ora una cartella condivisa in lettura / scrittura a due vie. Più contenitori possono montare la stessa cartella. E persisterà una volta chiuso il / i container / i.

inserisci qui la descrizione dell'immagine


Grazie, questo mi ha salvato un passo. Stavo cercando di aggiungere un volume. basta montare la dir
Chaim Eliyah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.