Beheben des Fehlers 'docker-compose: Befehl nicht gefunden'

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Lab bietet eine praktische Anleitung zur Lösung des Fehlers "docker-compose: Befehl nicht gefunden", einem häufigen Problem, das Docker-Benutzer begegnen. Docker Compose ist ein essentielles Tool zum Verwalten von multi-container Docker-Anwendungen, und das Auftreten dieses Fehlers kann Ihren Workflow behindern. Indem Sie dieses Lab absolvieren, erwerben Sie die Fähigkeiten, um dieses Problem zu diagnostizieren und zu beheben, was es Ihnen ermöglicht, Ihre containerisierten Anwendungen weiterhin effektiv zu entwickeln und bereitzustellen.

docker compose command not found

Dieses Lab erfordert eine Internetverbindung zum Lernen, daher können nur Pro-Benutzer die VM starten. Upgrade your account to Pro.

Docker Compose verstehen und die Installation überprüfen

Was ist Docker Compose?

Docker Compose ist ein Tool, das Ihnen hilft, multi-container Anwendungen zu definieren und zu teilen. Mit Compose können Sie eine YAML-Datei erstellen, um die Dienste Ihrer Anwendung zu konfigurieren, und anschließend alle Dienste mit einem einzigen Befehl starten. Es vereinfacht den Prozess der Verwaltung mehrerer zusammenarbeitender Container.

Überprüfen, ob Docker Compose installiert ist

Lassen Sie uns zunächst überprüfen, ob Docker Compose bereits auf Ihrem System installiert ist. Öffnen Sie ein Terminal und führen Sie aus:

docker-compose --version

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

docker-compose: Befehl nicht gefunden
command not found

Wenn Sie jedoch eine Fehlermeldung wie docker-compose: Befehl nicht gefunden erhalten, bedeutet dies, dass Docker Compose nicht installiert oder nicht richtig in Ihrem Systempfad konfiguriert ist.

Überprüfen der Docker-Installation

Bevor wir Docker Compose installieren, überprüfen wir, ob Docker selbst richtig installiert ist. Führen Sie aus:

docker --version

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

Wenn Sie diese Ausgabe nicht sehen, ist Docker möglicherweise nicht richtig installiert. Für dieses Lab konzentrieren wir uns jedoch auf die Lösung des Docker Compose-Problems.

Installation von Docker Compose

Da wir bestätigt haben, dass Docker Compose nicht installiert oder nicht zugänglich ist, installieren wir es. Es gibt einige verschiedene Methoden, um Docker Compose zu installieren, aber wir konzentrieren uns auf den einfachsten Ansatz für Ubuntu-Systeme.

Methode 1: Verwenden des apt-Paketmanagers

Der einfachste Weg, Docker Compose zu installieren, ist über den apt-Paketmanager. Machen wir das:

  1. Zunächst legen wir das Repository fest und installieren die Abhängigkeiten:
## Fügen Sie den offiziellen GPG-Schlüssel von Docker hinzu:
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

## Fügen Sie das Repository zu den Apt-Quellen hinzu:
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

Sie sollten eine Ausgabe sehen, die den Aktualisierungsprozess zeigt.

  1. Als nächstes installieren wir Docker Compose:
sudo apt install -y docker-compose-plugin

Sie sollten eine Ausgabe sehen, die den Installationsfortschritt zeigt.

  1. Nachdem die Installation abgeschlossen ist, überprüfen wir, ob es funktioniert hat, indem wir die Version überprüfen:
docker compose version

Hinweis: Bei neueren Docker-Installationen lautet der Befehl docker compose (mit einem Leerzeichen) statt docker-compose (mit einem Bindestrich).

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Docker Compose version v2.33.1

Methode 2: Verwenden von curl, um eine bestimmte Version zu installieren

Sie können diese Methode überspringen, wenn Sie bereits Docker Compose über die apt-Methode installiert haben.

Wenn die apt-Methode nicht funktioniert oder Sie eine bestimmte Version benötigen, können Sie Docker Compose direkt installieren:

  1. Erstellen Sie ein Verzeichnis für Docker-CLI-Plugins, wenn es nicht existiert:
mkdir -p ~/.docker/cli-plugins/
  1. Laden Sie die Docker Compose-Binärdatei herunter:
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

Während der Dateiherunterladung sollten Sie eine Fortschrittsanzeige sehen.

  1. Machen Sie das Binär ausführbar:
chmod +x ~/.docker/cli-plugins/docker-compose
  1. Überprüfen Sie die Installation:
docker compose version

Sie sollten eine Ausgabe sehen, die die Docker Compose-Version zeigt.

Erstellen eines einfachen Docker Compose-Projekts

Jetzt, nachdem wir Docker Compose erfolgreich installiert haben, erstellen wir ein einfaches Docker Compose-Projekt, um sicherzustellen, dass alles korrekt funktioniert.

Erstellen eines Projektverzeichnisses

Zunächst erstellen wir ein Verzeichnis für unser Docker Compose-Projekt:

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

Erstellen einer Docker Compose-Datei

Jetzt erstellen wir eine einfache Docker Compose-Datei, die einen grundlegenden Nginx-Webserver ausführt. Erstellen Sie eine Datei namens docker-compose.yml mit dem nano-Texteditor:

nano docker-compose.yml

Fügen Sie im Editor den folgenden Inhalt hinzu:

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

Diese Konfiguration definiert:

  • Einen Dienst namens "web", der das neueste Nginx-Image verwendet
  • Die Portzuordnung von Port 80 des Containers zu Port 8080 unseres Hosts
  • Ein Volume, das ein lokales Verzeichnis auf das Nginx-Webroot abbildet

Drücken Sie Strg+O, dann Enter, um die Datei zu speichern, und Strg+X, um nano zu verlassen.

Erstellen von HTML-Inhalt

Lassen Sie uns das html-Verzeichnis und eine einfache index.html-Datei erstellen:

mkdir -p html
nano html/index.html

Fügen Sie im Editor den folgenden HTML-Inhalt hinzu:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

Drücken Sie Strg+O, dann Enter, um die Datei zu speichern, und Strg+X, um nano zu verlassen.

Ausführen des Docker Compose-Projekts

Jetzt führen wir unser Docker Compose-Projekt aus:

docker compose up -d

Das -d-Flag führt die Container im detachierten Modus (im Hintergrund) aus.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

Dies zeigt an, dass Docker Compose erfolgreich die Container erstellt und gestartet hat.

Überprüfen des Webservers

Lassen Sie uns überprüfen, ob unser Webserver richtig läuft:

curl http://localhost:8080

Sie sollten den zuvor erstellten HTML-Inhalt sehen:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Docker Compose is working!</h1>
    <p>
      If you can see this page, you have successfully resolved the
      docker-compose issue.
    </p>
  </body>
</html>

Dies bestätigt, dass Docker Compose richtig funktioniert.

docker compose is working

Verwalten von Docker Compose-Anwendungen

Jetzt, nachdem wir eine Docker Compose-Anwendung erfolgreich eingerichtet und ausgeführt haben, lernen wir, wie wir sie mit verschiedenen Docker Compose-Befehlen verwalten.

Überprüfen von laufenden Containern

Um den Status Ihrer Docker Compose-Container zu überprüfen, führen Sie aus:

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

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

Dies zeigt, dass Ihr Nginx-Webserver-Container läuft und die Portzuordnung aktiv ist.

Anzeigen von Containerprotokollen

Um die Protokolle aus Ihren Containern anzuzeigen, führen Sie aus:

docker compose logs

Dies wird die kombinierten Protokolle aus allen Containern in Ihrer Docker Compose-Anwendung anzeigen. Sie sollten eine Ausgabe sehen, die Nginx-Startmeldungen enthält.

Um die Protokolle für einen bestimmten Dienst anzuzeigen, geben Sie seinen Namen an:

docker compose logs web

Beenden Ihrer Anwendung

Um Ihre Docker Compose-Anwendung zu beenden, ohne die Container zu entfernen, führen Sie aus:

docker compose stop

Sie sollten eine Ausgabe sehen, die angibt, dass die Container gestoppt werden:

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

Um zu überprüfen, ob die Container gestoppt sind, überprüfen Sie ihren Status:

docker compose ps

Sie sollten sehen, dass die Container nicht mehr laufen.

Wieder Starten Ihrer Anwendung

Um Ihre gestoppten Container erneut zu starten, führen Sie aus:

docker compose start

Sie sollten eine Ausgabe sehen, die angibt, dass die Container gestartet werden:

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

Überprüfen Sie, ob sie wieder laufen:

docker compose ps

Beenden und Entfernen Ihrer Anwendung

Wenn Sie mit Ihrer Docker Compose-Anwendung fertig sind, können Sie alle Container, Netzwerke und Volumes mit einem einzigen Befehl stoppen und entfernen:

docker compose down

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

Dies zeigt an, dass Ihre Container gestoppt und entfernt wurden und das für sie erstellte Netzwerk ebenfalls entfernt wurde.

Problembehandlung von häufigen Docker Compose-Problemen

Dieser Schritt ist optional. Sie können ihn überspringen, wenn Sie nicht möchten, Docker Compose-Probleme zu beheben.

Auch nachdem Sie den Fehler "docker-compose: Befehl nicht gefunden" behoben haben, können Sie andere häufige Probleme mit Docker Compose auftauchen. Lassen Sie uns diese Probleme und ihre Lösungen untersuchen.

Problem 1: Konflikte mit vorhandenen Containern

Manchmal können Sie Fehler wie diesen erhalten:

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

Dies geschieht, wenn ein Container mit demselben Namen bereits existiert. Schauen wir uns an, wie man das behandelt:

  1. Zunächst überprüfen Sie, ob es bereits Container gibt:
docker ps -a

Dieser Befehl listet alle Container auf, einschließlich der gestoppten.

  1. Wenn Sie einen Container mit einem konfligierenden Namen sehen, können Sie ihn entfernen:
docker rm -f docker-compose-test-web-1

Ersetzen Sie docker-compose-test-web-1 durch den tatsächlichen Container-Namen aus Ihrer Ausgabe.

Problem 2: Berechtigung verweigert-Fehler

Manchmal können Sie Berechtigungsfehler bei der Verwendung von Docker Compose sehen. Diese treten oft auf, weil Docker-Befehle normalerweise root-Rechte erfordern. Wenn Sie einen Fehler wie diesen sehen:

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

Sie müssen möglicherweise sudo mit Ihren Docker Compose-Befehlen verwenden oder sicherstellen, dass Ihr Benutzer in der Docker-Gruppe ist. Um Ihren Benutzer zur Docker-Gruppe hinzuzufügen:

sudo usermod -aG docker $USER

Hinweis: Dies erfordert das Ausloggen und erneute Anmelden, damit es wirksam wird. Für dieses Lab können wir sudo mit unseren Befehlen verwenden, wenn nötig.

Problem 3: Portkonflikte

Wenn Sie einen Fehler wie diesen sehen:

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

Es bedeutet, dass ein anderer Dienst bereits Port 8080 verwendet. Um dies zu beheben:

  1. Finden Sie heraus, was Port 8080 verwendet:
sudo lsof -i :8080
  1. Entweder stoppen Sie diesen Dienst oder ändern Sie Ihre docker-compose.yml, um einen anderen Port zu verwenden:
nano docker-compose.yml

Ändern Sie die Portzuordnung von "8080:80" in etwas wie "8081:80", speichern Sie und beenden Sie.

  1. Starten Sie Ihre Docker Compose-Anwendung erneut:
docker compose up -d

Üben Sie das Beheben eines Portkonflikts

Lassen Sie uns absichtlich einen Portkonflikt erzeugen und beheben:

  1. Erstellen Sie ein neues Docker Compose-Projekt mit demselben Port:
mkdir -p ~/project/another-test
cd ~/project/another-test
nano docker-compose.yml
  1. Fügen Sie folgenden Inhalt hinzu:
version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Speichern Sie und beenden Sie.

  1. Starten Sie den neuen Dienst:
docker compose up -d
  1. Nun kehren Sie zu Ihrem ursprünglichen Projekt zurück und versuchen, es zu starten:
cd ~/project/docker-compose-test
docker compose up -d

Sie sollten einen Portkonfliktsfehler sehen.

  1. Ändern Sie Ihre ursprüngliche docker-compose.yml, um Port 8081 zu verwenden:
nano docker-compose.yml

Ändern Sie "8080:80" in "8081:80", speichern Sie und beenden Sie.

  1. Versuchen Sie es erneut zu starten:
docker compose up -d

Jetzt sollten beide Dienste laufen, einer auf Port 8080 und der andere auf Port 8081.

  1. Bereinigen Sie, indem Sie beide Projekte stoppen und entfernen:
docker compose down
cd ~/project/another-test
docker compose down

Zusammenfassung

Herzlichen Glückwunsch, dass Sie dieses Lab zu der Lösung des Fehlers "docker-compose: Befehl nicht gefunden" abgeschlossen haben. Sie haben erfolgreich:

  1. Überprüft den Installationsstatus von Docker und Docker Compose
  2. Docker Compose mit verschiedenen Methoden installiert
  3. Ein einfaches Docker Compose-Anwendung erstellt und ausgeführt
  4. Wichtige Docker Compose-Befehle für die Verwaltung von Anwendungen gelernt
  5. Häufige Docker Compose-Probleme und deren Lösungen untersucht

Diese Fähigkeiten werden wertvoll sein, wenn Sie in Zukunft mit multi-Container-Docker-Anwendungen arbeiten. Die Problembehandlungstechniken, die Sie gelernt haben, können auf viele andere Docker-verwandte Probleme angewendet werden, was Ihren Entwicklungsprozess reibungsloser und effizienter macht.