Si vous recherchez une vue détaillée de tous les principaux composants de Docker à partir d'images Docker, de conteneurs, etc., la commande docker inspect est faite pour vous.
Dans ce didacticiel, vous apprendrez à devenir un détective pour découvrir des informations détaillées sur de nombreux composants Docker pour le débogage, le dépannage ou simplement votre simple curiosité.
Commençons !
Prérequis
Si vous souhaitez suivre étape par étape, assurez-vous d'avoir les éléments suivants :
- Docker :ce didacticiel utilise Docker v19.03.11 sur Ubuntu 18.04.5 LTS.
- Toute image Docker téléchargée et disponible. Ce didacticiel utilise la dernière image NGINX Docker disponible sur Docker Hub.
- Au moins un conteneur s'exécutant sur l'hôte Docker.
Inspecter les images Docker avec Docker Inspect
L'Docker Inspect
peut fournir des informations sur de nombreux composants Docker différents, mais commençons d'abord par l'un des composants les plus populaires ; images. Si vous avez téléchargé une image, comment recherchez-vous ensuite des informations sur cette image ? Découvrons.
En supposant que vous avez au moins une image sur votre hôte Docker, utilisez le inspect
commande pour interroger cette image. La commande ci-dessous suppose que vous avez une image appelée nginx
sur votre hébergeur.
docker image inspect nginx
Une fois exécutée, la commande ci-dessus renvoie une multitude d'informations via JSON sur cette image particulière. Certains attributs notables sont :
- La balise d'image.
- L'heure à laquelle l'image a été créée.
- Le nom d'hôte du conteneur associé à l'image Docker nginx.
- Les ports réseau que le conteneur met à la disposition du réseau extérieur.
- Vous remarquerez également le(s) volume(s) attaché(s) au conteneur qui appartient à l'image Docker nginx.
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273230.png)
Obtenir des informations détaillées sur les réseaux Docker
L'docker inspect
la commande n'est pas seulement reléguée à la saisie d'informations sur les images et les conteneurs ; il peut également interroger les réseaux. Les réseaux Docker permettent aux conteneurs de communiquer de différentes manières, par exemple via un réseau pont (un réseau privé), un réseau hôte (un réseau public) ou un réseau superposé.
Connaître les réseaux Docker est important car cela vous permet de basculer vers un autre réseau Docker à tout moment selon les besoins de l'application en vous déconnectant puis en vous reconnectant.
En supposant que vous êtes toujours sur le terminal :
1. Exécutez la commande ci-dessous. Le docker network ls
La commande liste tous les réseaux présents dans le Docker. Vous aurez besoin de la sortie de cette commande pour trouver l'ID du réseau.
docker network ls
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273298.png)
Ensuite, transmettez un ID de réseau au docker inspect network
commande. Cette commande renvoie diverses informations sur le réseau particulier, comme indiqué ci-dessous.
docker inspect network 4748f122c987
1. Le type de réseau.
2. L'adresse de sous-réseau utilisée par le réseau.
3 et 4. Informations récapitulatives sur chaque conteneur utilisant ce réseau particulier.
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273377.jpg)
Comprendre les modèles Go de Docker et le Format
Paramètre
Jusqu'à présent, vous avez appris à utiliser la commande Docker inspect sans utiliser de paramètres d'options supplémentaires. Mais si vous avez besoin de manipuler le format de sortie, pensez à utiliser le --format
drapeau. Le --format
Le paramètre utilise des modèles Go pour filtrer et afficher les informations renvoyées par docker inspect
.
Diverses fonctions sont utilisées avec l'indicateur de format, telles que join, println, table, etc. Discutons-en quelques-unes !
Par exemple, vous souhaitez peut-être joindre certaines valeurs à partir de la sortie d'un conteneur particulier. Si c'est le cas, le join
la commande fonctionne bien. Ci-dessous, vous verrez que le join
la commande concatène les chaînes ensemble (nginx, -g, daemon off
) avec chaque élément séparé par un séparateur (,
).
docker inspect --format '{{join .Args " , "}}' container_id
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273390.png)
Peut-être souhaitez-vous capitaliser une valeur ? Utilisez le upper
commande.
docker inspect --format "{{upper .Name}}" container_id
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273431.png)
Vous pouvez trouver de nombreux exemples différents d'utilisation du Format
paramètre.
Rechercher le nom de l'image de base d'un conteneur Docker
Dans la section précédente, vous avez vu comment obtenir une vue détaillée de toutes vos images Docker, y compris les conteneurs utilisant ces images. Mais que se passe-t-il si vous connaissez déjà un ID de conteneur et avez besoin de trouver rapidement l'image à partir de laquelle il a été créé ? Vous pouvez fournir l'ID du conteneur à docker inspect
.
Pour trouver le nom de l'image à partir de laquelle un conteneur particulier est construit, exécutez le docker inspect
ci-dessous commande. La commande ci-dessous transmet l'ID du conteneur (8f34d039fa3a
dans ce cas) à docker inspect
et utilise le Format
paramètre pour ne renvoyer que l'image
valeur de la Config
nœud dans la sortie JSON.
# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273435.png)
Vous pouvez voir ce que l'ensemble de la Config
le nœud ressemble à ci-dessous et où l'Image
nom vient.
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273497.png)
Rechercher l'adresse IP, l'adresse MAC et les liaisons de port d'un conteneur
Bien que vous sachiez maintenant comment trouver le réseau utilisé par un conteneur, comment savez-vous quelle adresse IP ou adresse Mac, et les liaisons de port sur ce réseau, un conteneur utilise ? Tu l'as deviné! docker inspect
.
Pour affiner l'adresse IP utilisée par un conteneur, transmettez l'ID du conteneur à docker inspect
commande. Encore une fois, utilisez le Format
paramètre pour filtrer le JSON indésirable afin d'obtenir exactement ce que vous recherchez.
Vous verrez le Format
l'argument de paramètre ci-dessous indique docker inspect
uniquement pour renvoyer la valeur intégrée dans les NetworkSettings
→Networks
→ IPAddress
Attribut JSON utilisant la range
attribut. L'attribut Range vous permet d'itérer sur un tableau, en définissant le .
valeur à chaque élément du tableau.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273497.png)
Vous verrez les principaux NetworkSettings
nœud ci-dessous et où l'IPAddress
la valeur est imbriquée.
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273408.png)
De même, pour trouver l'adresse MAC du conteneur, utilisez docker inspect
commande conteneur comme indiqué ci-dessous.
Encore une fois, vous verrez que le Format
l'argument de paramètre ci-dessous utilise la range
mais cette fois, trouvez l'adresse Mac du conteneur en cochant NetworkSettings
→Networks
→ Mac address
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273532.png)
Enfin, pour vérifier toutes les liaisons de port d'un conteneur, exécutez le docker inspect
ci-dessous commande. Vous verrez le Format
l'argument de paramètre ci-dessous utilise la range
attribut pour trouver les liaisons de port du conteneur en vérifiant NetworkSettings
→HostPort
.
One doit connaître les liaisons de port car si un port est déjà utilisé, il ne doit pas être réutilisé ; sinon, il lancera un message d'erreur indiquant que le port est déjà alloué.
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273592.png)
Obtenir une vue détaillée du volume Docker à l'aide de Docker Inspect
Jusqu'à présent, vous avez appris à trouver des informations détaillées sur les images, les conteneurs et la mise en réseau, mais vous n'avez pas appris le stockage. Changeons cela.
Pour vous assurer que le didacticiel comporte au moins un volume monté attaché à un conteneur, créons d'abord un conteneur et montons un volume de stockage.
Si vous avez déjà un volume de stockage monté sur un conteneur, vous pouvez ignorer cette partie.
La commande ci-dessous crée un nouveau conteneur Docker appelé my_container
, expose le port 80 à l'hôte (-p 80:80
), monte un volume basé sur le /var/container_dir de l'hôte répertoire appelé mount_val (-v mounted_vol:/var/container_dir
) en utilisant le nginx
photo.
docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx
Maintenant que vous avez un volume monté sur un conteneur, fournissez le nom du volume à docker volume inspect
. Notez ci-dessous que la commande renvoie une sortie JSON, fournissant uniquement des informations sur le volume de stockage monté.
docker volume inspect mounted_vol
![](https://m.unixlinux.online/article/uploadfiles/202205/2022050909273548.png)
Conclusion
Vous devriez maintenant pouvoir utiliser le docker inspect
commande dans de nombreuses situations différentes, depuis la recherche d'informations sur les images, les conteneurs, la mise en réseau et le stockage.
Comment comptez-vous utiliser docker inspect
demander des informations sur votre propre environnement Docker ?