Created
November 10, 2025 15:05
-
-
Save garnajee/7d505f737192a7afb57131dc321def21 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Script pour lister les conteneurs Docker en cours d'exécution, leurs ports et noms. | |
| # Prend un dossier en entrée (bien qu'il utilise principalement 'docker ps' qui est global). | |
| # Syntaxe : ./check_docker_ports.sh [DOSSIER_DE_BASE] | |
| # Fonction pour afficher l'aide | |
| usage() { | |
| echo "Utilisation: $0 [DOSSIER_DE_BASE]" | |
| echo "Le dossier est optionnel, le script liste tous les conteneurs Docker en cours d'exécution." | |
| exit 1 | |
| } | |
| # Vérifier si docker est installé et accessible | |
| if ! command -v docker &> /dev/null | |
| then | |
| echo "Erreur: La commande 'docker' n'a pas été trouvée. Assurez-vous que Docker est installé et dans le PATH." | |
| exit 1 | |
| fi | |
| # Le dossier d'entrée est ignoré dans cette version car 'docker ps' est global | |
| # Si vous voulez filtrer les conteneurs par emplacement de docker-compose, | |
| # le script deviendrait beaucoup plus complexe. | |
| # Pour une liste des services UP & RUNNING, 'docker ps' est suffisant. | |
| BASE_DIR=${1:-"."} | |
| echo "Analyse des conteneurs Docker en cours d'exécution..." | |
| echo "--------------------------------------------------------" | |
| # Utiliser 'docker ps' avec l'option --format pour un parsing facile | |
| # On récupère les colonnes suivantes : Noms (Names), Ports (Ports), Statut (Status) | |
| # Le format est : "{{.Names}}\t{{.Ports}}\t{{.Status}}" | |
| CONTAINERS_INFO=$(docker ps --format "{{.Names}}\t{{.Ports}}\t{{.Status}}") | |
| # On prépare l'en-tête du tableau | |
| # On utilise printf pour un formatage en colonne plus fiable | |
| printf "| %-30s | %-40s | %-15s |\n" "Application (Nom du Conteneur)" "Ports Mappés (Hôte -> Conteneur)" "Statut" | |
| printf "| %-30s | %-40s | %-15s |\n" "------------------------------" "----------------------------------------" "---------------" | |
| # Parcourir chaque ligne d'information | |
| IFS=$'\n' | |
| for line in $CONTAINERS_INFO; do | |
| # Séparer les champs par tabulation | |
| NAME=$(echo "$line" | cut -f1) | |
| PORTS_LINE=$(echo "$line" | cut -f2) | |
| STATUS=$(echo "$line" | cut -f3) | |
| # Vérifier si le conteneur a des ports mappés | |
| if [[ -n "$PORTS_LINE" ]]; then | |
| # Extraire les mappings Hôte:Port | |
| # La ligne de ports est souvent du format '0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp' | |
| # On ne garde que les parties qui nous intéressent (Hôte:Port -> Conteneur:Port) | |
| # Le champ Ports peut contenir plusieurs mappings séparés par des virgules et des espaces. | |
| # On remplace les virgules par des retours à la ligne pour un traitement par ligne | |
| # et on boucle sur chaque mapping | |
| # On extrait la partie Hôte:Port | |
| HOST_PORTS=$(echo "$PORTS_LINE" | sed -E 's/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:)?([0-9]+->[0-9]+\/[a-z]+)/\2/g' | tr ',' '\n' | sed 's/^[ \t]*//') | |
| # On affiche chaque mapping de port dans le tableau | |
| FIRST_LINE=true | |
| IFS_BACKUP=$IFS | |
| IFS=$'\n' | |
| for MAPPING in $HOST_PORTS; do | |
| # S'il s'agit de la première ligne pour ce conteneur, on affiche le nom et le statut | |
| if $FIRST_LINE ; then | |
| printf "| **%-30s** | %-40s | %-15s |\n" "$NAME" "$MAPPING" "$STATUS" | |
| FIRST_LINE=false | |
| else | |
| # Sinon, on affiche juste les ports sans répéter le nom/statut | |
| printf "| %-30s | %-40s | %-15s |\n" "" "$MAPPING" "" | |
| fi | |
| done | |
| IFS=$IFS_BACKUP # Rétablir l'IFS | |
| else | |
| # Conteneur sans mapping de port public | |
| printf "| **%-30s** | %-40s | %-15s |\n" "$NAME" "AUCUN PORT PUBLIC" "$STATUS" | |
| fi | |
| printf "| %-30s | %-40s | %-15s |\n" "------------------------------" "----------------------------------------" "---------------" | |
| done | |
| echo "" | |
| echo "✅ Opération terminée. Le tableau liste uniquement les conteneurs en statut 'Up'." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment