
Commandes d'inspection : `docker logs`, `docker inspect`, `docker exec`
Apprenez à utiliser `docker logs` pour voir les sorties, `docker inspect` pour obtenir des détails techniques, et `docker exec` pour exécuter des commandes dans vos conteneurs Docker.
Observer et interagir avec vos conteneurs en activité
Une fois qu'un conteneur est en cours d'exécution, il est souvent nécessaire de comprendre ce qu'il fait, d'accéder à ses informations de configuration détaillées ou même d'interagir directement avec son environnement interne. Ces actions sont cruciales pour le monitoring, le débogage et la maintenance des applications conteneurisées. La ligne de commande Docker fournit des outils puissants pour cette inspection : `docker logs` pour visualiser les sorties, `docker inspect` pour obtenir des métadonnées détaillées, et `docker exec` pour exécuter des commandes à l'intérieur du conteneur.
Ces trois commandes forment un trio essentiel pour quiconque travaille avec Docker au quotidien. Elles permettent de passer de la simple gestion du cycle de vie (démarrer, arrêter) à une compréhension plus profonde et à une interaction directe avec les processus isolés dans les conteneurs. Maîtriser leur utilisation vous rendra beaucoup plus efficace pour diagnostiquer les problèmes et gérer vos déploiements.
Consulter les journaux d'un conteneur : `docker logs`
La commande `docker logs` permet de récupérer les journaux (logs) générés par le processus principal d'un conteneur. Par défaut, elle affiche tout ce que le processus a écrit sur sa sortie standard (stdout) et sa sortie d'erreur standard (stderr). C'est souvent le premier endroit où chercher lorsqu'une application dans un conteneur ne se comporte pas comme prévu.
Syntaxe de base :
docker logs Plusieurs options sont très utiles :
- Suivre les logs en temps réel : L'option `-f` ou `--follow` affiche les logs existants puis reste connectée pour afficher les nouvelles lignes au fur et à mesure qu'elles sont générées. Très pratique pour le monitoring en direct.
- Afficher les dernières lignes : L'option `--tail N` (où N est un nombre) permet de n'afficher que les N dernières lignes de log. Par exemple, `docker logs --tail 50 mon_conteneur` affiche les 50 dernières lignes.
- Ajouter des timestamps : L'option `-t` ou `--timestamps` préfixe chaque ligne de log avec son timestamp.
- Filtrer par date : Les options `--since` et `--until` permettent de filtrer les logs sur une période donnée (ex: `docker logs --since 2023-10-27T10:00:00 mon_conteneur`).
Exemple concret pour suivre les logs d'un serveur web :
# Lancer un conteneur nginx en arrière-plan
docker run -d --name webserver nginx
# Suivre les logs en temps réel
docker logs -f webserver
# Appuyez sur Ctrl+C pour arrêter le suiviObtenir des informations détaillées : `docker inspect`
La commande `docker inspect` fournit une mine d'informations détaillées sur la configuration et l'état d'un objet Docker (conteneur, image, volume, réseau...). Pour un conteneur, cela inclut son état, sa configuration réseau (adresse IP, ports mappés), les volumes montés, les variables d'environnement, et bien plus encore. La sortie est au format JSON, ce qui la rend facile à parser par des scripts.
Syntaxe de base :
docker inspect La sortie peut être très verbeuse.Pour extraire une information spécifique, l'option `--format` est extrêmement puissante. Elle utilise la syntaxe des templates Go pour naviguer dans la structure JSON et afficher uniquement ce qui vous intéresse. C'est très utile pour l'automatisation.
Exemples d'utilisation de `--format` :
# Obtenir l'adresse IP du conteneur 'webserver' sur le réseau bridge par défaut
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver
# Obtenir l'état du conteneur (ex: running, exited)
docker inspect --format='{{.State.Status}}' webserver
# Lister les montages de volumes
docker inspect --format='{{json .Mounts}}' webserver | jq . # Utilise jq pour formater le JSONL'utilisation de `--format` demande un peu de pratique pour maîtriser la syntaxe des templates Go, mais elle offre une flexibilité considérable pour récupérer précisément les données nécessaires.Exécuter une commande dans un conteneur : `docker exec`
La commande `docker exec` permet d'exécuter une nouvelle commande à l'intérieur d'un conteneur qui est déjà en cours d'exécution. C'est l'équivalent d'ouvrir une session SSH, mais sans avoir besoin d'un serveur SSH dans le conteneur. C'est extrêmement utile pour le débogage, l'inspection de l'état interne, ou l'exécution de tâches administratives ponctuelles.
Syntaxe de base :
docker exec [OPTIONS] [ARGUMENTS...] Les options les plus courantes sont `-i` (`--interactive`) et `-t` (`--tty`). Elles sont souvent utilisées ensemble (`-it`) pour obtenir un shell interactif à l'intérieur du conteneur.
Exemples :
# Lister les fichiers dans /app du conteneur 'mon_app'
docker exec mon_app ls /app
# Vérifier la version de python dans un conteneur python
docker exec conteneur_python python --version
# Ouvrir un shell interactif (bash) dans le conteneur 'webserver'
# (-i pour interactif, -t pour allouer un pseudo-terminal)
docker exec -it webserver bash
# Une fois dans le shell, vous pouvez exécuter des commandes comme si vous étiez 'dans' le conteneur
# tapez 'exit' pour quitter le shell et revenir à votre terminal hôte
# Si bash n'est pas disponible (ex: images alpine), essayez sh :
docker exec -it mon_conteneur_alpine shIl est crucial de distinguer `docker exec` de `docker run`. `docker run` crée et démarre un nouveau conteneur à partir d'une image, tandis que `docker exec` exécute une commande dans un conteneur existant et déjà démarré. Utiliser `docker exec` est idéal pour des interventions ponctuelles sans perturber l'exécution principale du conteneur.