Wie man den docker container exec Befehl verwendet, um Befehle in einem laufenden Container auszuführen

DockerDockerBeginner
Jetzt üben

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

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl docker container exec effektiv nutzen können, um Befehle innerhalb eines laufenden Docker-Containers auszuführen. Wir beginnen mit dem Start eines Containers für die Ausführung und untersuchen dann, wie Sie einen einzelnen Befehl in einem laufenden Container ausführen und eine interaktive Shell für komplexere Interaktionen starten können.

Darüber hinaus deckt dieses Lab ab, wie Sie die Ausführungsumgebung anpassen können, indem Sie Umgebungsvariablen setzen und das Arbeitsverzeichnis für den exec-Prozess festlegen. Dies vermittelt Ihnen die Fähigkeiten, Ihre laufenden Container zu verwalten und mit ihnen zu interagieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555108{{"Wie man den docker container exec Befehl verwendet, um Befehle in einem laufenden Container auszuführen"}} docker/ps -.-> lab-555108{{"Wie man den docker container exec Befehl verwendet, um Befehle in einem laufenden Container auszuführen"}} docker/exec -.-> lab-555108{{"Wie man den docker container exec Befehl verwendet, um Befehle in einem laufenden Container auszuführen"}} docker/pull -.-> lab-555108{{"Wie man den docker container exec Befehl verwendet, um Befehle in einem laufenden Container auszuführen"}} end

Container für die Ausführung starten

In diesem Schritt lernen Sie, wie Sie einen Docker-Container starten und einen Befehl darin ausführen. Docker-Container sind leichtgewichtig, portabel und eigenständige Einheiten, die eine Anwendung und ihre Abhängigkeiten kapseln.

Zuerst laden wir das ubuntu-Image von Docker Hub. Dieses Image enthält eine minimale Ubuntu-Betriebssystemumgebung.

docker pull ubuntu:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird. Sobald der Download abgeschlossen ist, können Sie einen Container basierend auf diesem Image starten und einen einfachen Befehl ausführen. Wir verwenden den echo-Befehl, um eine Nachricht auszugeben.

docker run ubuntu:latest echo "Hello from Docker container!"

Lassen Sie uns diesen Befehl aufschlüsseln:

  • docker run: Dies ist der Befehl zum Erstellen und Starten eines neuen Containers.
  • ubuntu:latest: Dies gibt das Image an, das für den Container verwendet werden soll. ubuntu ist der Imagename und latest der Tag, der die neueste Version bezeichnet.
  • echo "Hello from Docker container!": Dies ist der Befehl, der innerhalb des Containers ausgeführt wird.

Sie sollten die Ausgabe Hello from Docker container! in Ihrem Terminal sehen. Dies bestätigt, dass der Container gestartet wurde und der Befehl erfolgreich ausgeführt wurde.

Befehl in einem laufenden Container ausführen

Im vorherigen Schritt haben wir einen Container gestartet und einen Befehl ausgeführt, der dann beendet wurde. In diesem Schritt lernen wir, wie man einen Befehl in einem bereits laufenden Container ausführt. Dies ist nützlich, um den Zustand eines laufenden Containers zu überprüfen oder administrative Aufgaben durchzuführen.

Zuerst starten wir einen Container, der kontinuierlich läuft. Wir verwenden erneut das ubuntu-Image und führen einen Befehl aus, der den Container am Leben hält, wie z.B. sleep infinity.

docker run -d ubuntu:latest sleep infinity

Die verwendeten Optionen:

  • -d: Diese Option führt den Container im Detached-Modus aus, d.h. er läuft im Hintergrund und blockiert Ihr Terminal nicht.
  • sleep infinity: Dieser Befehl im Container lässt ihn unendlich lange schlafen, wodurch der Container aktiv bleibt.

Nun ermitteln wir die Container-ID des laufenden Containers. Mit dem Befehl docker ps können Sie laufende Container auflisten.

docker ps

Sie sollten eine ähnliche Ausgabe sehen, die Ihren laufenden Container anzeigt:

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu:latest   "sleep infinity"   About a minute ago   Up About a minute             <container_name>

Kopieren Sie die CONTAINER ID aus der Ausgabe. Nun können wir mit dem Befehl docker exec einen Befehl innerhalb dieses laufenden Containers ausführen. Ersetzen Sie <container_id> durch die tatsächlich kopierte ID.

docker exec / < container_id > ls

Dieser Befehl führt ls / im angegebenen Container aus und listet den Inhalt des Root-Verzeichnisses im Dateisystem des Containers auf. Sie sollten eine Liste von Verzeichnissen und Dateien sehen, ähnlich wie auf einem Linux-System.

Dies demonstriert, wie man einen Befehl in einem laufenden Container ausführt, ohne ihn zu stoppen oder neu zu starten.

Interaktive Shell im laufenden Container ausführen

Im vorherigen Schritt haben wir einen einzelnen Befehl in einem laufenden Container ausgeführt. Oft benötigt man jedoch eine umfangreichere Interaktion mit einem laufenden Container, etwa zur Fehlersuche oder zur Untersuchung des Dateisystems. In diesem Schritt lernen Sie, wie Sie eine interaktive Shell-Sitzung in einem laufenden Container öffnen.

Wir verwenden weiterhin den ubuntu-Container, den Sie im vorherigen Schritt gestartet haben. Falls der Container nicht läuft, können Sie ihn mit dem Befehl aus dem vorherigen Schritt neu starten:

docker run -d ubuntu:latest sleep infinity

Ermitteln Sie die Container-ID Ihres laufenden ubuntu-Containers mit docker ps:

docker ps

Verwenden Sie nun den Befehl docker exec mit den Optionen -it, um eine interaktive Terminal-Sitzung im Container zu öffnen. Ersetzen Sie <container_id> durch die tatsächliche ID Ihres laufenden Containers.

docker exec -it < container_id > bash

Die neuen Optionen im Detail:

  • -i: Diese Option hält STDIN offen, auch wenn nicht verbunden. Dies ist für interaktive Sitzungen notwendig.
  • -t: Diese Option weist ein pseudo-TTY zu, das für eine Shell-Sitzung erforderlich ist.
  • bash: Dies ist der im Container auszuführende Befehl, in diesem Fall die Bash-Shell.

Nach Ausführung dieses Befehls sollte sich Ihr Terminal-Prompt ändern, was anzeigt, dass Sie sich nun in der Bash-Shell des Containers befinden. Sie können nun Befehle in der Container-Umgebung ausführen. Versuchen Sie beispielsweise, die Dateien im aktuellen Verzeichnis aufzulisten:

ls

Sie interagieren nun direkt mit dem Dateisystem und der Umgebung des Containers. Um die Shell des Containers zu verlassen und zur Terminal-Sitzung Ihres Host-Rechners zurückzukehren, geben Sie einfach exit ein:

exit

Sie sollten nun wieder in Ihrer ursprünglichen Terminal-Sitzung sein. Dieser interaktive Shell-Zugriff ist ein mächtiges Werkzeug für die Fehlersuche und Verwaltung Ihrer Container.

Umgebungsvariablen für den Exec-Prozess setzen

In diesem Schritt lernen Sie, wie Sie Umgebungsvariablen speziell für den mit docker exec ausgeführten Befehl festlegen können. Dies ermöglicht es Ihnen, Konfigurationen oder andere Informationen an den im Container laufenden Prozess zu übergeben, ohne die Umgebung des Containers dauerhaft zu verändern.

Wir verwenden weiterhin den laufenden ubuntu-Container aus den vorherigen Schritten. Falls dieser nicht läuft, starten Sie ihn mit:

docker run -d ubuntu:latest sleep infinity

Ermitteln Sie die Container-ID Ihres laufenden ubuntu-Containers mit docker ps:

docker ps

Nun führen wir einen Befehl im Container aus und setzen dabei eine Umgebungsvariable speziell für diese Ausführung. Wir verwenden den Befehl printenv, um Umgebungsvariablen anzuzeigen. Ersetzen Sie <container_id> durch Ihre Container-ID.

docker exec -e MY_VARIABLE="Hello from LabEx" MY_VARIABLE < container_id > printenv

Die neue Option im Detail:

  • -e MY_VARIABLE="Hello from LabEx": Diese Option setzt eine Umgebungsvariable namens MY_VARIABLE mit dem Wert "Hello from LabEx" für den ausgeführten printenv-Befehl.

Sie sollten die Ausgabe Hello from LabEx in Ihrem Terminal sehen. Dies bestätigt, dass die Umgebungsvariable erfolgreich für den printenv-Prozess gesetzt wurde.

Um zu demonstrieren, dass diese Umgebungsvariable nur für den exec-Prozess und nicht für den Hauptprozess des Containers gesetzt ist, führen wir printenv MY_VARIABLE erneut ohne die -e-Option aus:

docker exec MY_VARIABLE < container_id > printenv

Diesmal sollten Sie keine Ausgabe sehen oder möglicherweise eine Fehlermeldung, die anzeigt, dass die Variable nicht gesetzt ist. Dies zeigt, dass die Umgebungsvariable nur für den mit dem -e-Flag ausgeführten Befehl verfügbar war.

Das Setzen von Umgebungsvariablen mit docker exec -e ist eine praktische Methode, um dynamische Konfigurationen an Prozesse in Ihren Containern zu übergeben.

Arbeitsverzeichnis für den Exec-Prozess festlegen

In diesem letzten Schritt lernen Sie, wie Sie das Arbeitsverzeichnis für mit docker exec ausgeführte Befehle festlegen können. Standardmäßig führt docker exec Befehle im konfigurierten Arbeitsverzeichnis des Containers aus (oft /). Sie können dies mit der -w-Option überschreiben.

Wir verwenden weiterhin den laufenden ubuntu-Container. Falls dieser nicht läuft, starten Sie ihn mit:

docker run -d ubuntu:latest sleep infinity

Ermitteln Sie die Container-ID Ihres laufenden ubuntu-Containers mit docker ps:

docker ps

Nun führen wir einen Befehl aus, der das aktuelle Arbeitsverzeichnis im Container anzeigt. Wir verwenden dazu den pwd-Befehl. Ersetzen Sie <container_id> durch Ihre Container-ID.

docker exec < container_id > pwd

Sie sollten / als Ausgabe sehen, das Standard-Arbeitsverzeichnis im ubuntu-Image.

Jetzt führen wir den pwd-Befehl erneut aus, diesmal jedoch mit der -w-Option, um das Arbeitsverzeichnis auf /tmp zu setzen.

docker exec -w /tmp < container_id > pwd

Die neue Option im Detail:

  • -w /tmp: Diese Option setzt das Arbeitsverzeichnis für den pwd-Befehl auf /tmp innerhalb des Containers.

Sie sollten nun /tmp als Ausgabe sehen. Dies zeigt, dass Sie ein anderes Arbeitsverzeichnis für mit docker exec ausgeführte Befehle angeben können. Dies ist nützlich, wenn Sie Befehle ausführen müssen, die auf Dateien an einem bestimmten Ort im Container arbeiten.

Damit schließen wir das Lab zum Ausführen von Befehlen in Docker-Containern ab. Sie haben gelernt, wie Sie Container für die Ausführung starten, Befehle in laufenden Containern ausführen, interaktive Shell-Sitzungen öffnen, Umgebungsvariablen setzen und das Arbeitsverzeichnis für exec-Prozesse festlegen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie einen Docker-Container starten und mit docker run einen Befehl darin ausführen. Anschließend sind Sie dazu übergegangen, Befehle in einem bereits laufenden Container mit dem Befehl docker container exec auszuführen, was für die Inspektion oder Verwaltung aktiver Container essenziell ist.

Darüber hinaus haben Sie erweiterte Funktionen von docker container exec kennengelernt, einschließlich dem Setzen von Umgebungsvariablen für den ausgeführten Prozess und der Festlegung des Arbeitsverzeichnisses. Dies bietet mehr Kontrolle und Flexibilität bei der Interaktion mit laufenden Containern.