Lors de l'utilisation d'images docker à partir de registres, j'ai souvent besoin de voir les volumes créés par les conteneurs de l'image.
Remarque: j'utilise Docker version 1.3.2 sur Red Hat 7.
Exemple
L' postgres
image officielle du Docker Registry a un volume configuré pour les conteneurs à /var/lib/postgresql/data
.
Quelle est la commande la plus succincte pour afficher le volume /var/lib/postgresql/data
dans un postgres
conteneur?
Réponses:
Utilisez
docker ps
pour obtenir l'ID du conteneur.ensuite
docker inspect -f '{{ .Mounts }}' containerid
Exemple:
terminal 1
terminal 2
Le résultat
est, apparemment, dû à l'utilisation du langage Go pour implémenter les outils de commande docker.
La
docker inspect
commande sans le-f format
est assez verbeuse. Comme il s'agit de JSON, vous pouvez le diriger vers python ou nodejs et extraire tout ce dont vous avez besoin.docker history <image name>
affichera les calques cuits dans une image. Malheureusement,docker history
semble entravé par sa mise en forme et le manque d'options pour choisir ce qui est affiché.Vous pouvez choisir des formats laconiques et verbeux, via le drapeau --no-trunc.
Voici un exemple détaillé.
la source
Avec docker 1.10, vous disposez désormais de nouvelles commandes pour les conteneurs de volume de données.
(pour les conteneurs réguliers, voir la section suivante, pour docker 1.8+):
docker volume ls
docker volume inspect
Avec docker 1.8.1 (août 2015), a
docker inspect -f '{{ .Volumes }}' containerid
serait vide!Vous devez maintenant vérifier
Mounts
, qui est une liste de chemins montés comme:Si vous voulez le chemin du premier montage (par exemple), ce serait (en utilisant l'index 0):
Comme Mike Mitterer commente ci - dessous :
Ou, comme commenté par Mitja , utilisez la
jq
commande .la source
jq
paquet sous ubuntu, puis y rediriger:docker inspect -f '{{ json .Mounts }}' containerid | jq
Afficher les noms et les destinations des points de montage des volumes utilisés par un conteneur:
Ceci est compatible avec Docker 1.13.
la source
J'ai fait une recherche sur Google et trouvé ma propre réponse :) Ma mémoire ces jours-ci ... Et pour ceux qui ne le savent pas, commandlinefu est un bon endroit pour trouver et publier ces extraits.
Répertoriez les volumes Docker par conteneur.
Exemple de sortie.
la source
Vous pouvez obtenir des informations sur les volumes qui ont été spécifiquement intégrés dans le conteneur en inspectant le conteneur et en consultant la sortie JSON et en comparant quelques champs. Lorsque vous exécutez
docker inspect myContainer
, les champsVolumes
etVolumesRW
vous fournissent des informations sur TOUS les volumes montés à l'intérieur d'un conteneur, y compris les volumes montés dans le Dockerfile avec laVOLUME
directive et sur la ligne de commande avec ladocker run -v
commande. Cependant, vous pouvez isoler les volumes montés dans le conteneur à l'aide de ladocker run -v
commande en vérifiant leHostConfig.Binds
champ dans ladocker inspect
sortie JSON. Pour clarifier, ceHostConfig.Binds
champ vous indique quels volumes ont été montés spécifiquement dans votredocker run
commande avec le-v
option. Donc, si vous faites une référence croisée entre ce champ et leVolumes
champ, vous pourrez déterminer quels volumes ont été cuits dans le conteneur à l'aide desVOLUME
directives du Dockerfile.Un grep pourrait accomplir ceci comme:
Et...
Et dans mon exemple, vous pouvez voir que j'ai monté
/var/docker/docker-registry/config
dans le conteneur en/registry
utilisant l'-v
option de madocker run
commande, et j'ai monté les volumes/data
et en/config
utilisant laVOLUME
directive dans mon Dockerfile. Le conteneur n'a pas besoin d'être exécuté pour obtenir ces informations, mais il doit avoir été exécuté au moins une fois afin de remplir laHostConfig
sortie JSON de votredocker inspect
commande.la source
HostConfig.Binds
et en quoi est-il différent de ce qui est.Volumes
vu dans la réponse de @Paul?.Volumes
répertorie les "chemins de point de montage de mappage d'objets (chaînes) à l'intérieur du conteneur vers des objets vides" etHostConfig.Binds
décrit la liaison réelle -volume monté dans le conteneur. Il me semble alors queHostConfig.Binds
c'est ce que vous voulez lire, par opposition.Volumes
, même si j'aimerais entendre un meilleur raisonnement.#docker
sur Freenode (le canal principal pour docker), et si j'entends quelque chose en retour, je vais certainement mettre à jour ici avec plus d'informations. C'est une très bonne question que vous avez posée ici sur la différence. Merci!HostConfig.Binds
n'est rempli que lorsque le chemin d'hôte du volume est spécifié? Par exemple, pardocker run -d -v /docker-test:/docker-test postgres
rapport àdocker run -d -v /docker-test postgres
. Il semble que Docker gère ces deux cas de volume très différemment pour une raison quelconque.Pour Docker 1.8, j'utilise:
la source
si vous souhaitez répertorier tous les noms de conteneurs avec les volumes appropriés attachés à chaque conteneur, vous pouvez essayer ceci:
exemple de sortie:
/ opt_rundeck_1 - nom du conteneur
[..] - volumes attachés au conatiner
la source
Voici une commande de ligne pour obtenir les informations de volume pour l'exécution des conteneurs:
La sortie est:
Version Docker:
la source
Variation utile pour les utilisateurs de docker-compose:
Cela affichera très soigneusement les informations de volume analysables. Exemple de mon wordpress docker-compose:
La sortie contient une ligne pour chaque conteneur, répertoriant les volumes (et les points de montage) utilisés. Modifiez la partie {{.Name}}: {{.Destination}} pour afficher les informations que vous souhaitez.
Si vous voulez juste une simple liste de volumes, un par ligne
Idéal pour générer une liste de volumes à sauvegarder. J'utilise cette technique avec Blacklabelops Volumerize pour sauvegarder tous les volumes utilisés par tous les conteneurs dans un docker-compose. Les documents pour Volumerize ne l'appellent pas, mais vous n'avez pas besoin de l'utiliser dans un conteneur persistant ou d'utiliser les fonctionnalités intégrées pour démarrer et arrêter les services. Je préfère laisser les opérations critiques telles que la sauvegarde et le contrôle des services à l'utilisateur réel (docker extérieur). Mes sauvegardes sont déclenchées par le compte d'utilisateur réel (non-docker) et utilisent stoper-composer stop pour arrêter les services, sauvegarder tous les volumes en cours d'utilisation et enfin docker-compose start pour redémarrer.
la source
la source
Voici ma version pour trouver les points de montage d'un docker composer. Utilisez-le pour sauvegarder les volumes.
Il s'agit d'une combinaison de solutions précédentes.
la source
Si vous utilisez pwsh (powershell core), vous pouvez essayer
vous pouvez également voir le nom du conteneur et les supports comme ci-dessous
Comme la sortie est convertie en json, vous pouvez obtenir toutes les propriétés qu'elle possède.
la source
Nous pouvons le faire sans la syntaxe du modèle -f Go:
La première opération jq supprime
jq .[]
l'{}
encapsuleur d' objet .La deuxième opération jq retournera tous les éléments de montage.
la source