web-dev-qa-db-fra.com

Docker Tournez le volume anonyme en volume nommé

J'ai essayé une image Docker à l'aide de la ligne de commande Docker sans spécifier de noms pour les volumes. Maintenant, j'ai trouvé que je souhaite continuer à utiliser ce conteneur/image, mais en définissant le conteneur dans Docker Compose.

Qu'est-ce qui est Meilleure pratique pour conserver les données des volumes anonymes/Sans nom et les utiliser dans le nouveau conteneur créé par Docker Compose?

  • Puis-je en quelque sorte convertir le Sans nom en volumes nommés?
  • ou devrais-je créer un nouveau conteneur avec Docker composer avec des volumes nommés et copier les données?
  • ou toute autre option?
12
freiheitsnetz

Vous ne pouvez pas actuellement renommer les volumes existants. (Ceci est vrai si ils étaient auparavant nommés ou étaient Sans nom et avaient leur nom généré automatiquement.)

Vous pouvez voir ce numéro Pour plus d'informations sur la mise en œuvre de cette fonctionnalité, ainsi que d'ajouter votre "+1"/"Thumbs Up" pour laisser les développeurs savoir que vous le souhaitez.

Sans cela, autant que je sache, le seul bon moyen de le faire est de créer le nouveau volume nommé et de copier les données.

3
Moshe Katz

Au moment de cette rédaction, la seule option est de copier les données. Les détails peuvent varier en fonction de votre configuration particulière. La liste générale des étapes à effectuer est la suivante:

  1. Arrêtez et retirez le conteneur source pour que le nouveau volume soit créé à l'étape 3.

    docker stop NAME
    docker rm NAME
    # or
    docker-compose stop SERVICE
    docker-compose rm SERVICE
    

    Dans certains cas, vous pourrez peut-être reporter le conteneur source, par exemple. en passant de docker-compose volume anonyme à docker-compose volume nommé. Dans ce cas up créerait le nouveau volume. Et vous pouvez procéder à la copie des données. Mais même dans ce cas, l'arrêt du conteneur est conseillé d'éviter les données modifiées lorsque vous les copiez. Et vous devez supprimer le conteneur source pour docker-compose Pour passer au nouveau volume (faites attention aux avertissements).

    Dans certains cas, ce n'est pas vraiment nécessaire, par exemple. lors de la passation des conteneurs autonomes à docker-compose.

  2. Changer docker-compose.yml le cas échéant.

  3. Démarrez le nouveau conteneur pour le nouveau volume à créer.

    Conteneurs autonomes:

    docker run ...
    # or
    docker-compose up -d
    
  4. Arrêtez le nouveau conteneur pour éviter les données modifiées.

    docker stop ...
    # or
    docker-compose stop
    

    En cas de migration vers E.G. Un conteneur autonome avec un volume nommé Vous pouvez simplement créer le volume au lieu de démarrer/arrêter le conteneur.

  5. Copier les données.

    docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \
        bash -c '
            shopt -s dotglob
            # rm -r /to/*  # e.g. pg might have populated the new volume
            cp -r /from/* /to
        '
    

    Où src_volume, dst_volume - nom de volume, ID ou trajet absolu d'un répertoire sur l'hôte.

    Pour énumérer des volumes attachés à un conteneur, utilisez:

    docker inspect CONTAINER --format '{{json .Mounts}}' | jq
    

    Où conteneur - nom du conteneur ou identifiant.

  6. Démarrer le nouveau conteneur.

    docker run ...
    # or
    docker-compose up -d
    
  7. Réjouis-toi :)

Si vous souhaitez expérimenter différentes configurations, consultez le suivant GIST .

1
x-yuri

J'ai trouvé cela à la recherche d'informations sur les volumes nommés. Je me rends compte que c'est un ancien poste, mais après l'avoir lu, j'ai fait des recherches et j'ai constaté qu'il était possible à ce moment-là, au moins, à exporter le système de fichiers en tant que Tarball et Importez une citacle à l'image ou comme image .

Premièrement exporter le système de fichiers de vos conteneurs:

docker container export -o filename CONTAINER

Et après/lors de la création d'un nouveau conteneur, importez l'archive vers votre système de fichiers:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Si vous spécifiez une archive, Docker l'endaille dans le conteneur par rapport à la/(racine).

Vous pouvez également créer des images non étiquetées avec ce petit dandy:

docker import filesystem.tar
1
Richard Simpson