Résolution de l'erreur 'docker-compose: commande introuvable'

DockerBeginner
Pratiquer maintenant

Introduction

Ce laboratoire fournit un guide pratique pour résoudre l'erreur « docker-compose: commande introuvable », un problème courant rencontré par les utilisateurs de Docker. Docker Compose est un outil essentiel pour gérer les applications Docker multi-conteneurs, et la rencontre de cette erreur peut entraver votre flux de travail. En terminant ce laboratoire, vous acquerrez les compétences pour résoudre et corriger ce problème, vous permettant de continuer à développer et à déployer efficacement vos applications conteneurisées.

docker compose command not found

Ce laboratoire nécessite une connexion Internet pour l'apprentissage, donc seuls les utilisateurs Pro peuvent démarrer la machine virtuelle. Mettez à niveau votre compte en Pro.

Comprendre Docker Compose et Vérifier l'installation

Qu'est-ce que Docker Compose?

Docker Compose est un outil qui vous aide à définir et à partager des applications multi-conteneurs. Avec Compose, vous pouvez créer un fichier YAML pour configurer les services de votre application, puis démarrer tous les services avec une seule commande. Il simplifie le processus de gestion de plusieurs conteneurs qui travaillent ensemble.

Vérifier si Docker Compose est installé

Voyons d'abord vérifier si Docker Compose est déjà installé sur votre système. Ouvrez un terminal et exécutez :

docker-compose --version

Vous verrez une sortie similaire à :

docker-compose: commande introuvable
command not found

Cependant, si vous recevez un message d'erreur comme docker-compose: commande introuvable, cela signifie que Docker Compose n'est pas installé ou n'est pas correctement configuré dans le PATH de votre système.

Vérifier l'installation de Docker

Avant d'installer Docker Compose, vérifions que Docker lui-même est correctement installé. Exécutez :

docker --version

Vous devriez voir une sortie similaire à :

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

Si vous ne voyez pas cette sortie, Docker peut ne pas être correctement installé. Cependant, pour ce laboratoire, nous nous concentrerons sur la résolution du problème de Docker Compose.

Installer Docker Compose

Puisque nous avons confirmé que Docker Compose n'est pas installé ou n'est pas accessible, allons l'installer. Il existe plusieurs méthodes différentes pour installer Docker Compose, mais nous allons nous concentrer sur l'approche la plus simple pour les systèmes Ubuntu.

Méthode 1 : Utiliser le gestionnaire de paquets apt

Le moyen le plus simple d'installer Docker Compose est via le gestionnaire de paquets apt. Allons-y :

  1. Tout d'abord, configurez le référentiel et installez les dépendances :
## Ajoutez la clé GPG officielle de Docker :
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

## Ajoutez le référentiel aux sources Apt :
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Vous devriez voir une sortie montrant le processus de mise à jour.

  1. Ensuite, installez Docker Compose :
sudo apt install -y docker-compose-plugin

Vous verrez une sortie montrant la progression de l'installation.

  1. Une fois l'installation terminée, vérifiez que cela a fonctionné en vérifiant la version :
docker compose version

Remarque : Dans les nouvelles installations de Docker, la commande est docker compose (avec un espace) plutôt que docker-compose (avec un tiret).

Vous devriez voir une sortie similaire à :

Docker Compose version v2.33.1

Méthode 2 : Utiliser curl pour installer une version spécifique

Vous pouvez sauter cette méthode si vous avez déjà installé Docker Compose en utilisant la méthode apt.

Si la méthode apt n'a pas fonctionné ou si vous avez besoin d'une version spécifique, vous pouvez installer Docker Compose directement :

  1. Créez un répertoire pour les plugins de l'interface de ligne de commande Docker s'il n'existe pas :
mkdir -p ~/.docker/cli-plugins/
  1. Téléchargez le binaire Docker Compose :
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Vous verrez une barre de progression pendant le téléchargement du fichier.

  1. Rendez le binaire exécutable :
chmod +x ~/.docker/cli-plugins/docker-compose
  1. Vérifiez l'installation :
docker compose version

Vous devriez voir une sortie montrant la version de Docker Compose.

Création d'un projet Docker Compose simple

Maintenant que nous avons installé avec succès Docker Compose, créons un projet Docker Compose simple pour nous assurer que tout fonctionne correctement.

Création d'un répertoire de projet

Tout d'abord, créons un répertoire pour notre projet Docker Compose :

mkdir -p ~/project/docker-compose-test
cd ~/project/docker-compose-test

Création d'un fichier Docker Compose

Maintenant, créons un fichier Docker Compose simple qui exécutera un serveur web Nginx de base. Créez un fichier nommé docker-compose.yml à l'aide de l'éditeur de texte nano :

nano docker-compose.yml

Dans l'éditeur, ajoutez le contenu suivant :

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes: -./html:/usr/share/nginx/html

Cette configuration définit :

  • Un service nommé "web" utilisant l'image Nginx la plus récente
  • La redirection de port du port 80 du conteneur vers le port 8080 de notre hôte
  • Un volume qui mappe un répertoire local au répertoire racine web de Nginx

Appuyez sur Ctrl+O puis Entrée pour enregistrer le fichier, puis Ctrl+X pour quitter nano.

Création du contenu HTML

Créons le répertoire html et un fichier index.html simple :

mkdir -p html
nano html/index.html

Dans l'éditeur, ajoutez le contenu HTML suivant :

<!DOCTYPE html>
<html>
  <head>
    <title>Test Docker Compose</title>
  </head>
  <body>
    <h1>Docker Compose fonctionne!</h1>
    <p>
      Si vous pouvez voir cette page, vous avez résolu avec succès le problème
      de docker-compose.
    </p>
  </body>
</html>

Appuyez sur Ctrl+O puis Entrée pour enregistrer le fichier, puis Ctrl+X pour quitter nano.

Exécution du projet Docker Compose

Maintenant, exécutons notre projet Docker Compose :

docker compose up -d

L'option -d exécute les conteneurs en mode détaché (en arrière-plan).

Vous devriez voir une sortie similaire à :

Creating network "docker-compose-test_default" with the default driver
Creating docker-compose-test_web_1... done

Cela indique que Docker Compose a créé et démarré avec succès votre conteneur.

Vérification du serveur web

Vérifions que notre serveur web est en cours d'exécution correctement :

curl http://localhost:8080

Vous devriez voir le contenu HTML que vous avez créé précédemment :

<!DOCTYPE html>
<html>
  <head>
    <title>Test Docker Compose</title>
  </head>
  <body>
    <h1>Docker Compose fonctionne!</h1>
    <p>
      Si vous pouvez voir cette page, vous avez résolu avec succès le problème
      de docker-compose.
    </p>
  </body>
</html>

Cela confirme que Docker Compose fonctionne correctement.

docker compose is working

Gérer les applications Docker Compose

Maintenant que nous avons correctement configuré et exécuté une application Docker Compose, découvrons comment la gérer avec diverses commandes Docker Compose.

Vérifier les conteneurs en cours d'exécution

Pour vérifier l'état de vos conteneurs Docker Compose, exécutez :

cd ~/project/docker-compose-test
docker compose ps

Vous devriez voir une sortie similaire à :

NAME                        COMMAND                  SERVICE             STATUS              PORTS
docker-compose-test-web-1   "/docker-entrypoint.…"   web                 running             0.0.0.0:8080->80/tcp

Cela montre que votre conteneur de serveur web Nginx est en cours d'exécution et que la redirection de port est active.

Consulter les journaux des conteneurs

Pour consulter les journaux de vos conteneurs, exécutez :

docker compose logs

Cela affichera les journaux combinés de tous les conteneurs de votre application Docker Compose. Vous devriez voir une sortie qui inclut les messages de démarrage de Nginx.

Pour consulter les journaux d'un service spécifique, spécifiez son nom :

docker compose logs web

Arrêter votre application

Pour arrêter votre application Docker Compose sans supprimer les conteneurs, exécutez :

docker compose stop

Vous devriez voir une sortie indiquant que les conteneurs sont en train d'être arrêtés :

✔ Container docker-compose-test-web-1  Stopped

Pour vérifier que les conteneurs sont arrêtés, vérifiez leur état :

docker compose ps

Vous devriez constater que les conteneurs ne sont plus en cours d'exécution.

Démarrer à nouveau votre application

Pour redémarrer vos conteneurs arrêtés, exécutez :

docker compose start

Vous devriez voir une sortie indiquant que les conteneurs sont en train d'être démarrés :

✔ Container docker-compose-test-web-1  Started

Vérifiez qu'ils sont à nouveau en cours d'exécution :

docker compose ps

Arrêter et supprimer votre application

Lorsque vous avez fini avec votre application Docker Compose, vous pouvez arrêter et supprimer tous les conteneurs, les réseaux et les volumes avec une seule commande :

docker compose down

Vous devriez voir une sortie similaire à :

✔ Container docker-compose-test-web-1  Removed
✔ Network docker-compose-test_default  Removed

Cela indique que vos conteneurs ont été arrêtés et supprimés, et que le réseau créé pour eux a également été supprimé.

Dépannage des problèmes courants de Docker Compose

Cette étape est facultative. Vous pouvez la sauter si vous ne souhaitez pas pratiquer le dépannage des problèmes de Docker Compose.

Même après avoir résolu l'erreur "docker-compose: commande introuvable", vous pouvez rencontrer d'autres problèmes courants avec Docker Compose. Explorons ces problèmes et leurs solutions.

Problème 1 : Conflicts avec des conteneurs existants

Parfois, vous pouvez rencontrer des erreurs comme :

ERROR: for web  Cannot create container for service web: Conflict. The container name "/docker-compose-test-web-1" is already in use by container.

Cela se produit lorsqu'un conteneur avec le même nom existe déjà. Voyons comment gérer cela :

  1. Tout d'abord, vérifiez s'il existe des conteneurs existants :
docker ps -a

Cette commande liste tous les conteneurs, y compris ceux arrêtés.

  1. Si vous voyez un conteneur avec un nom en conflit, vous pouvez le supprimer :
docker rm -f docker-compose-test-web-1

Remplacez docker-compose-test-web-1 par le nom réel du conteneur de votre sortie.

Problème 2 : Erreurs de refus d'accès

Parfois, vous pouvez voir des erreurs de permission lorsqu'il s'agit de Docker Compose. Ces erreurs surviennent souvent car les commandes Docker nécessitent généralement des privilèges root. Si vous voyez une erreur comme :

ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

Vous devrez peut-être utiliser sudo avec vos commandes Docker Compose, ou vous assurer que votre utilisateur est dans le groupe Docker. Pour ajouter votre utilisateur au groupe Docker :

sudo usermod -aG docker $USER

Remarque : Cela nécessite de vous déconnecter et de vous reconnecter pour prendre effet. Pour ce laboratoire, nous pouvons utiliser sudo avec nos commandes si nécessaire.

Problème 3 : Conflicts de ports

Si vous voyez une erreur comme :

ERROR: for web  Cannot start service web: driver failed programming external connectivity on endpoint: Bind for 0.0.0.0:8080 failed: port is already allocated

Cela signifie qu'un autre service utilise déjà le port 8080. Pour résoudre ce problème :

  1. Trouvez ce qui utilise le port 8080 :
sudo lsof -i :8080
  1. Arrêtez soit ce service, soit modifiez votre docker-compose.yml pour utiliser un autre port :
nano docker-compose.yml

Changez la redirection de port de "8080:80" en "8081:80", puis enregistrez et quittez.

  1. Démarrez à nouveau votre application Docker Compose :
docker compose up -d

Essayons de corriger un conflit de ports

Essayons délibérément de créer un conflit de ports et de le résoudre :

  1. Créez un nouveau projet Docker Compose avec le même port :
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
  1. Ajoutez le contenu suivant :
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Enregistrez et quittez.

  1. Démarrez le nouveau service :
docker compose up -d
  1. Maintenant, revenez à votre projet original et essayez de le démarrer :
cd ~/project/docker-compose-test
docker compose up -d

Vous devriez voir une erreur de conflit de ports.

  1. Modifiez votre docker-compose.yml original pour utiliser le port 8081 à la place :
nano docker-compose.yml

Changez "8080:80" en "8081:80", enregistrez et quittez.

  1. Essayez de le démarrer à nouveau :
docker compose up -d

Maintenant, les deux services devraient être en cours d'exécution, l'un sur le port 8080 et l'autre sur le port 8081.

  1. Nettoyez en arrêtant et en supprimant les deux projets :
docker compose down
cd ~/project/another-test
docker compose down

Sommaire

Félicitations pour avoir terminé ce laboratoire sur la résolution de l'erreur "docker-compose: commande introuvable". Vous avez réussi à :

  1. Vérifier l'état d'installation de Docker et de Docker Compose
  2. Installer Docker Compose en utilisant différentes méthodes
  3. Créer et exécuter une application Docker Compose simple
  4. Apprendre les commandes essentielles de Docker Compose pour gérer les applications
  5. Explorer les problèmes courants de Docker Compose et leurs solutions

Ces compétences seront précieuses lorsque vous travaillerez avec des applications Docker multi-conteneurs à l'avenir. Les techniques de dépannage que vous avez apprises peuvent être appliquées à de nombreux autres problèmes liés à Docker, rendant votre flux de travail de développement plus fluide et plus efficace.