web-dev-qa-db-fra.com

Docker: créer un volume persistant dans un répertoire spécifique

J'ai besoin de créer un volume persistant pour Docker. Le volume doit être nommé extra-addons et situé dans /mnt/.

J'exécute cette commande:

Sudo docker volume create /mnt/extra-addons

J'ai reçu ce message d'erreur:

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

Notez que lorsque je lance simplement: Sudo docker volume create extra-addons, Je ne suis pas confronté à ce problème mais lorsque j'inspecte le volume en question à l'aide de Sudo docker inspect extra-addons, Je vois qu'il est situé dans un endroit que je ne veux pas:

[
    {
        "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"
    }
]

Je veux dire que je veux plutôt voir le volume comme ceci: /mnt/extra-addons

Une idée?

16
Billal Begueradj

J'ai trouvé la solution:

J'ai dû installer local-persist plugin.

J'ai dû monter le volume pour créer au point de montage comme suit:

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

Vérifiez si j'ai obtenu ce que j'attendais:

Sudo docker volume inspect extra-addons

Résultat:

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

Voilà ce que je recherche.

14
Billal Begueradj

Si vous ne souhaitez pas installer de plugins sur votre docker, je vous recommande de créer un lien symbolique pour votre 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

N'hésitez pas à utiliser votre volume comme d'habitude (toutes vos données étant dans /mnt comme vous vouliez)

7
Tom Mekken

Je ne pense pas que l'utilisation du local-persist le pilote est le chemin à parcourir. Il n'a pas été mis à jour depuis longtemps. Vous pouvez monter un répertoire local (hôte) dans un conteneur Docker à l'aide du montage Docker.

L'exécution de ce qui suit crée un nouveau conteneur avec un répertoire monté mappé sur mon bureau.

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

Vous pouvez maintenant voir un dossier mnt à la racine de votre conteneur.

bin dev etc home mnt proc root sys tmp usr var

Création d'un nouveau fichier dans le conteneur

touch /mnt/extra-addons/test.txt

Crée un fichier test.txt sur ma machine hôte. Sur le chemin spécifié. Il s'agit maintenant d'un dossier partagé en lecture/écriture bidirectionnelle. Plusieurs conteneurs peuvent monter le même dossier. Et cela persistera une fois que vous aurez fermé votre/vos conteneur (s).

enter image description here

4
Lex