Loading...

Wie man docker exec verwendet

Jonas Scholz - Co-Founder von sliplane.ioJonas Scholz
3 min

Lass uns anschauen, wie man den docker exec Befehl nutzt. Dieses Tool ist super praktisch, wenn du einen neuen Befehl in einem Container ausführen willst, der bereits läuft.

Erste Schritte mit docker exec

Zunächst brauchst du einen laufenden Container. Nehmen wir an, wir haben einen Container namens mycontainer, den wir von einem alpine Image gestartet haben. Wir haben ihn so gestartet:

docker run -d -it --name mycontainer alpine sh

Dieser Befehl startet den Container im Hintergrund (-d), hält die Standardeingabe offen (-i) und fügt ein Pseudo-TTY (-t) hinzu, damit wir später damit interagieren können.

Befehle innerhalb des Containers ausführen

Jetzt nutzen wir docker exec, um etwas in mycontainer zu machen. Angenommen, wir wollen eine neue Datei namens execWorks im /tmp Verzeichnis unseres Containers erstellen. Das können wir so machen:

docker exec -d mycontainer touch /tmp/execWorks

Hier bedeutet -d, dass der Befehl im Hintergrund läuft, getrennt von unserem Terminal. Der touch Befehl erstellt die Datei.

Wenn du in eine interaktive Shell-Sitzung im Container springen willst, kannst du das auch tun:

docker exec -it mycontainer sh

Dieser Befehl startet eine neue Shell-Sitzung (sh) in mycontainer. Das -i hält die Eingabe offen und -t gibt dir eine terminalartige Oberfläche.

Umgebungsvariablen setzen

Manchmal musst du vielleicht bestimmte Umgebungsvariablen für den Befehl setzen, den du ausführst. docker exec ermöglicht dir das mit der Option --env oder -e. Zum Beispiel, um eine Shell-Sitzung mit benutzerdefinierten Umgebungsvariablen zu starten:

docker exec -it -e VAR_A=1 -e VAR_B=2 mycontainer sh

In dieser Sitzung wird VAR_A auf 1 und VAR_B auf 2 gesetzt. Diese Variablen sind nur für diese bestimmte sh-Sitzung verfügbar und beeinflussen keine anderen Prozesse im Container.

Das Arbeitsverzeichnis ändern

Standardmäßig führt docker exec Befehle im Standard-Arbeitsverzeichnis des Containers aus. Wenn du einen Befehl in einem anderen Verzeichnis ausführen musst, verwende die Option --workdir oder -w:

docker exec -it -w /tmp mycontainer sh

Dieser Befehl startet eine Shell-Sitzung im /tmp Verzeichnis von mycontainer.

Umgang mit Privilegien

Wenn du einen Befehl mit erhöhten Rechten ausführen musst, kannst du die Option --privileged verwenden. Dies gibt dem Befehl mehr Berechtigungen innerhalb des Containers, ähnlich wie bei der Verwendung von --privileged mit docker run.

Was passiert, wenn der Container pausiert ist?

Wenn du versuchst, docker exec auf einem pausiertem Container auszuführen, erhältst du einen Fehler. Der Befehl funktioniert nicht, weil die Prozesse des Containers vorübergehend angehalten sind.

Ein paar Dinge, die du beachten solltest

  • Der Befehl, den du mit docker exec ausführst, läuft nur so lange, wie der Hauptprozess des Containers (PID 1) läuft. Wenn der Container neu startet, wird der Befehl nicht erneut gestartet.
  • Der Befehl muss ausführbar sein. Du kannst keine verketteten Befehle direkt mit docker exec verwenden. Zum Beispiel wird docker exec -it my_container "echo a && echo b" nicht funktionieren, aber docker exec -it my_container sh -c "echo a && echo b" schon.

Die Verwendung von docker exec ist eine großartige Möglichkeit, mit deinen laufenden Containern zu interagieren und sie zu verwalten. Ob du Fehler behebst, Dateien hinzufügst oder einfach nur erkundest - es ist ein wesentliches Tool in deinem Docker-Werkzeugkasten.

Willkommen in der Container-Cloud

Sliplane macht es einfach, Container in der Cloud zu deployen und bei Bedarf zu skalieren. Probier es jetzt aus!