Fehlerbehebung 'zsh: command not found: docker-compose' mit Docker Compose

DockerDockerBeginner
Jetzt üben

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

Einführung

Docker Compose ist ein unverzichtbares Werkzeug für die Verwaltung von Docker-Anwendungen mit mehreren Containern. Dieses Lab führt Sie durch die Behebung des häufigen Fehlers "zsh: command not found: docker-compose", der vielen Benutzern beim Einstieg in Docker Compose begegnet.

Durch die Durchführung dieses Labs lernen Sie, wie Sie Docker Compose richtig installieren, Probleme im Zusammenhang mit Pfaden beheben und Docker Compose verwenden, um eine einfache Anwendung mit mehreren Containern auszuführen. Diese Fähigkeiten sind grundlegend für Entwickler, die mit containerisierten Anwendungen arbeiten.

Docker und Docker Compose verstehen

Bevor wir mit der Fehlerbehebung beginnen, wollen wir verstehen, was Docker Compose ist und warum es im Docker-Ökosystem wichtig ist.

Was ist Docker?

Docker ist eine Plattform, die es Entwicklern ermöglicht, Anwendungen in Containern zu erstellen, zu verpacken und auszuführen. Container sind leichtgewichtige, isolierte Umgebungen, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird – Code, Laufzeitumgebung, Systemwerkzeuge, Bibliotheken und Einstellungen.

Was ist Docker Compose?

Docker Compose ist ein Werkzeug zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern. Mit Docker Compose verwenden Sie eine YAML-Datei, um die Services, Netzwerke und Volumes Ihrer Anwendung zu konfigurieren. Anschließend können Sie mit einem einzigen Befehl alle Services aus Ihrer Konfiguration erstellen und starten.

Lassen Sie uns überprüfen, ob Docker richtig auf unserem System installiert ist:

docker --version

Sie sollten eine Ausgabe ähnlich dieser sehen:

Docker version 20.10.21, build baeda1f

Dies bestätigt, dass Docker installiert und einsatzbereit ist. Versuchen wir nun, Docker Compose auszuführen, um zu sehen, ob es installiert ist:

docker-compose --version

Wenn Docker Compose nicht installiert ist, wird der Fehler angezeigt:

zsh: command not found: docker-compose

Diese Fehlermeldung ist der Schwerpunkt unseres Labs – wir werden dieses Problem in den nächsten Schritten beheben.

Warum Docker Compose verwenden?

Docker Compose bietet mehrere Vorteile für die Verwaltung von Anwendungen mit mehreren Containern:

  1. Vereinfacht die Konfiguration: Definieren Sie Ihren gesamten Anwendungs-Stack in einer einzigen YAML-Datei.
  2. Gewährleistet Konsistenz: Führen Sie dasselbe Anwendungs-Setup in mehreren Umgebungen aus.
  3. Verwaltet Abhängigkeiten: Behandeln Sie die Startreihenfolge der Services und die Kommunikation zwischen Containern.
  4. Verbessert die Produktivität: Sparen Sie Zeit mit einfachen Befehlen zur Verwaltung Ihres gesamten Anwendungslebenszyklus.

Im nächsten Schritt installieren wir Docker Compose und beheben den Fehler "command not found".

Docker Compose installieren

Nachdem wir verstanden haben, was Docker Compose ist, installieren wir es auf unserem System, um den Fehler "command not found" zu beheben.

Docker Compose Binary herunterladen

Der erste Schritt ist das Herunterladen des Docker Compose Binary. Das offizielle Docker Compose Binary ist auf GitHub verfügbar. Wir verwenden den Befehl curl, um es herunterzuladen:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Dieser Befehl lädt das Docker Compose Binary herunter, das zu Ihrer Betriebssystemarchitektur passt, und speichert es unter /usr/local/bin/docker-compose. Die Ausführung des Befehls dauert einen Moment, da die Datei heruntergeladen wird.

Docker Compose ausführbar machen

Nach dem Herunterladen des Binarys müssen wir es ausführbar machen:

sudo chmod +x /usr/local/bin/docker-compose

Dieser Befehl gewährt dem Docker Compose Binary Ausführungsberechtigungen.

Die Installation überprüfen

Lassen Sie uns nun überprüfen, ob Docker Compose korrekt installiert wurde:

docker-compose --version

Sie sollten eine Ausgabe ähnlich dieser sehen:

Docker Compose version v2.17.2

Wenn Sie immer noch den Fehler "command not found" sehen, bedeutet dies, dass das Verzeichnis /usr/local/bin möglicherweise nicht in Ihrem PATH-System enthalten ist. Wir werden dieses Problem im nächsten Schritt angehen.

Die PATH-Variable verstehen

Die PATH-Variable ist eine Umgebungsvariable in Linux, die der Shell mitteilt, in welchen Verzeichnissen nach ausführbaren Dateien gesucht werden soll, wenn Sie einen Befehl ausführen. Um Ihren aktuellen PATH anzuzeigen, führen Sie aus:

echo $PATH

Sie sollten eine Liste von Verzeichnissen sehen, die durch Doppelpunkte (:) getrennt sind. Wenn /usr/local/bin nicht in dieser Liste enthalten ist, könnte dies erklären, warum die Shell den Befehl docker-compose nicht finden kann.

Im nächsten Schritt werden wir alle verbleibenden Probleme beheben, die uns möglicherweise daran hindern, Docker Compose zu verwenden.

Fehlerbehebung des "Command Not Found"-Fehlers

Wenn Sie nach der Installation immer noch den Fehler "zsh: command not found: docker-compose" erhalten, lassen Sie uns einige häufige Ursachen und deren Lösungen untersuchen.

Eine gängige Lösung ist das Erstellen eines symbolischen Links zum Docker Compose Binary in einem Verzeichnis, das definitiv in Ihrem PATH enthalten ist, wie z.B. /usr/bin:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Dieser Befehl erstellt einen symbolischen Link (Verknüpfung) zum Docker Compose Binary im Verzeichnis /usr/bin, das typischerweise standardmäßig im PATH des Systems enthalten ist.

Versuchen Sie nach dem Erstellen des symbolischen Links, Docker Compose erneut auszuführen:

docker-compose --version

Sie sollten jetzt die Docker Compose Versionsinformationen ohne Fehler sehen.

Lösung 2: Docker Compose Plugin verwenden (Alternative Methode)

In neueren Versionen von Docker ist Compose als Plugin verfügbar. Wenn Sie stattdessen diese Methode bevorzugen, können Sie Folgendes versuchen:

docker compose version

Beachten Sie das Fehlen eines Bindestrichs zwischen docker und compose. Wenn dieser Befehl funktioniert, bedeutet dies, dass Docker Compose als Plugin verfügbar ist und Sie es stattdessen mit dieser Syntax verwenden können.

Lösung 3: Docker Compose zu Ihrem PATH hinzufügen

Wenn Sie Docker Compose an seinem aktuellen Speicherort belassen möchten, der symbolische Link aber nicht funktioniert, können Sie das Verzeichnis manuell zu Ihrem PATH hinzufügen:

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

Dies fügt /usr/local/bin zu Ihrem PATH hinzu und wendet die Änderungen sofort auf Ihre aktuelle Sitzung an.

Überprüfung

Unabhängig davon, welche Lösung Sie verwendet haben, überprüfen Sie, ob Docker Compose jetzt korrekt funktioniert:

docker-compose --version

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Docker Compose version v2.17.2

Nachdem wir Docker Compose erfolgreich installiert und konfiguriert haben, erstellen wir im nächsten Schritt ein einfaches Docker Compose Projekt, um unsere Installation zu testen.

Erstellen eines einfachen Docker Compose Projekts

Nachdem Docker Compose ordnungsgemäß installiert ist und funktioniert, erstellen wir ein einfaches Projekt, um unser Setup zu testen. Wir erstellen eine einfache Webanwendung mit einem Webserver und einer Redis-Datenbank.

Projektverzeichnis erstellen

Erstellen wir zunächst ein dediziertes Verzeichnis für unser Projekt:

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

Eine Docker Compose Datei erstellen

Erstellen wir nun eine Datei docker-compose.yml mit dem Texteditor nano:

nano docker-compose.yml

Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die Datei ein:

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

Diese Docker Compose Datei definiert zwei Services:

  • web: Ein Nginx Webserver, der Inhalte aus einem lokalen Verzeichnis bereitstellt
  • redis: Eine Redis-Datenbank zum Caching oder zur Speicherung von Sitzungsdaten

Drücken Sie Ctrl+O gefolgt von Enter, um die Datei zu speichern, und drücken Sie dann Ctrl+X, um nano zu beenden.

HTML-Inhalt erstellen

Erstellen wir eine einfache HTML-Seite, die unser Web-Service bereitstellen soll:

mkdir -p html
nano html/index.html

Kopieren Sie den folgenden Inhalt und fügen Sie ihn in die Datei ein:

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Hello from Docker Compose!</h1>
    <p>If you can see this, your Docker Compose setup is working correctly.</p>
  </body>
</html>

Drücken Sie Ctrl+O gefolgt von Enter, um die Datei zu speichern, und drücken Sie dann Ctrl+X, um nano zu beenden.

Das Docker Compose Projekt ausführen

Starten wir nun unser Docker Compose Projekt:

docker-compose up -d

Das Flag -d führt die Container im Hintergrund aus (detached mode). Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1   ... done
Creating docker-compose-test_redis_1 ... done

Überprüfen, ob die Services ausgeführt werden

Überprüfen wir, ob unsere Services korrekt ausgeführt werden:

docker-compose ps

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

           Name                         Command               State          Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
docker-compose-test_web_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp

Auf die Webanwendung zugreifen

Sie können jetzt auf die Webanwendung zugreifen, indem Sie einen Webbrowser in der LabEx-Oberfläche öffnen und zu http://localhost:8080 navigieren. Sie sollten die Meldung "Hello from Docker Compose!" sehen.

Alternativ können Sie curl verwenden, um den Webserver über die Befehlszeile zu überprüfen:

curl http://localhost:8080

Sie sollten den zuvor erstellten HTML-Inhalt sehen.

Das Docker Compose Projekt stoppen

Wenn Sie mit dem Testen fertig sind, können Sie das Docker Compose Projekt stoppen:

docker-compose down

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Stopping docker-compose-test_web_1   ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1   ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default

Herzlichen Glückwunsch! Sie haben Docker Compose erfolgreich installiert, den Fehler "command not found" behoben und Ihr Setup mit einer einfachen Multi-Container-Anwendung getestet.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man:

  1. Die Rolle von Docker Compose bei der Verwaltung von Multi-Container-Anwendungen versteht
  2. Docker Compose auf Ihrem System installiert
  3. Den Fehler "zsh: command not found: docker-compose" behebt und löst
  4. Eine einfache Multi-Container-Anwendung mit Docker Compose erstellt und ausführt

Diese Fähigkeiten bieten eine solide Grundlage für die Arbeit mit Docker und Docker Compose. Sie können jetzt Docker Compose sicher verwenden, um komplexe Multi-Container-Anwendungen zu definieren, bereitzustellen und zu verwalten.

Für weiteres Lernen sollten Sie sich mit fortgeschritteneren Docker Compose Funktionen wie Umgebungsvariablen, Netzwerken, Volumes und der Skalierung von Services beschäftigen. Möglicherweise möchten Sie auch mehr über Docker Compose in Produktionsumgebungen erfahren und wie man es in CI/CD-Pipelines integriert.