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

13

J'ai besoin de créer un volume persistant pour Docker. Le volume doit être nommé extra-addonset 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-addonsje ne fais pas face à ce problème mais quand j'inspecte le volume en question à l'aide 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?

Billal Begueradj
la source

Réponses:

11

J'ai trouvé la solution:

J'ai dû installer un plugin local-persist .

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.

Billal Begueradj
la source
6

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

Maintenant, n'hésitez pas à utiliser votre volume comme d'habitude (avec toutes vos données étant /mntcomme vous le vouliez)

Tom Mekken
la source
Ne pensez pas que ce soit une bonne idée de supprimer des volumes gérés par Docker. Utilisez plutôt un montage pour monter un répertoire hôte dans Docker.
Lex
3

Je ne pense pas que l'utilisation du local-persistpilote soit la solution. 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 mntdossier à 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).

entrez la description de l'image ici

Lex
la source
Merci, cela m'a fait gagner un pas. J'essayais d'ajouter un volume. montez juste le dir
Chaim Eliyah