Wie man docker exec verwendet

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 wirddocker exec -it my_container "echo a && echo b"
nicht funktionieren, aberdocker 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.