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?
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.
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)
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).