web-dev-qa-db-fra.com

Localisation des volumes de données dans Docker

J'essaie d'apprendre le menu fixe en ce moment et je ne sais plus trop où se trouvent les volumes de données.

J'utilise Docker pour Windows. (Windows 10)

Dans la documentation, ils disent que l'exécution de docker inspect sur l'objet vous donnera la source: https://docs.docker.com/engine/tutorials/dockervolumes/#locating-a-volume

$ docker inspect web

"Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]

mais je ne le vois pas, je reçois ce qui suit:

$ docker inspect blog_postgres-data
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/blog_postgres-data/_data",
        "Name": "blog_postgres-data",
        "Options": {},
        "Scope": "local"
    }
]

Quelqu'un peut-il m'aider? Je veux juste savoir où mon volume de données existe réellement est-ce sur ma machine hôte? Si oui, comment puis-je obtenir le chemin?

Merci

18
Brad

Votre répertoire de volume est /var/lib/docker/volumes/blog_postgres-data/_data, et /var/lib/docker est généralement monté sur C:\Users\Public\Documents\Hyper-V\Virtual hard disks. Quoi qu'il en soit, vous pouvez le vérifier en consultant les paramètres du menu fixe.

Vous pouvez vous référer à this docs pour savoir comment partager des lecteurs avec docker sous Windows.

BTW, Source est l'emplacement sur l'hôte et Destination est l'emplacement à l'intérieur du conteneur dans la sortie suivante:

"Mounts": [
{
    "Name": "fac362...80535",
    "Source": "/var/lib/docker/volumes/fac362...80535/_data",
    "Destination": "/webapp",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
}
]

=============================================== =========================

Mis à jour pour répondre aux questions dans le commentaire:

Ma principale curiosité ici est que partager des images, etc. est une bonne chose, mais comment puis-je partager mes données?

En fait, volume est conçu à cet effet (gérer les données dans le conteneur docker), les données en volume sont conservées sur l'hôte FS et isolées avec le cercle de vie du conteneur/de l'image docker. Vous pouvez partager vos données avec volume en:

  • Monter le volume du menu fixe sur l'hôte et le réutiliser

    docker run -v /path/on/Host:/path/inside/container image

    Ensuite, toutes vos données seront conservées dans /path/on/Host, vous pourrez les sauvegarder, les copier sur une autre machine et réexécuter votre conteneur avec le même volume. 

  • Créez et montez un conteneur de données.

    Créer un conteneur de données: docker create -v /dbdata --name dbstore training/postgres /bin/true Exécutez un autre conteneur basé sur ce conteneur à l'aide de --volumes-from: docker run -d --volumes-from dbstore --name db1 training/postgres. Toutes les données générées par db1 seront conservées dans le volume du conteneur dbstore.

Pour plus d'informations, vous pouvez vous référer à documentation officielle des volumes de menu fixe , simplement, volumes est simplement un répertoire de votre hôte contenant toutes vos données de conteneur. Vous pouvez donc utiliser toutes les méthodes que vous avez utilisées auparavant pour sauvegarder/partager vos données.

puis-je pousser un volume sur le docker-hub comme je le fais avec des images?

Non, l'image docker est quelque chose que vous fournissez, mais les données ne le sont pas. Vous pouvez sauvegarder/conserver/partager vos données avec n’importe quelle méthode, mais transférer des données dans le registre de docker pour les partager n’a aucun sens.

puis-je faire des sauvegardes, etc.?

Oui, comme indiqué ci-dessus :-)

18
shizhz

Chaque conteneur possède son propre système de fichiers, indépendant du système de fichiers hôte. Si vous exécutez votre conteneur avec l'indicateur -v, vous pouvez monter des volumes afin que l'hôte et le conteneur voient les mêmes données (comme dans docker, exécutez -v hostFolder: containerFolder). 

La première sortie que vous avez imprimée décrit un tel volume monté (donc monte) où "/var/lib/docker/volumes/fac362...80535/_data" (hôte) est monté sur "/ webapp" (conteneur).

Je suppose que vous n’avez pas utilisé -v, le dossier n’est donc pas monté et n’est accessible que dans le système de fichiers conteneur que vous pouvez trouver dans "/ var/lib/docker/volumes/blog_postgres-data/_data". Ces données seront supprimées si vous supprimez le conteneur (docker -rm). Il peut donc être judicieux de monter le dossier.

Quant à la question où vous pouvez accéder à ces données à partir de Windows. Pour autant que je sache, docker pour Windows utilise le sous-système bash de Windows 10. J'essayerais de lancer bash pour Windows 10 et d'aller dans ce dossier ou de savoir comment accéder aux dossiers Linux à partir de Windows 10. Cochez cette page pour un FAQ sur le sous-système Linux dans Windows 10.

Mise à jour: Vous pouvez également utiliser docker cp pour copier des fichiers entre l’hôte et le conteneur.

0
herm