Wie führt man den Befehl docker exec in einem Docker-Container aus? (docker exec in den Container)
Um einen Befehl in einem laufenden Docker-Container auszuführen, verwenden Sie:
docker exec -it <container_id> <command>
Um beispielsweise eine Bash-Shell zu öffnen:
docker exec -it mycontainer bash
Um einen einzelnen Befehl auszuführen:
docker exec mycontainer ls /app
Docker ist ein weit verbreitetes Open-Source-Tool, das die Bereitstellung, Skalierung und Verwaltung von Anwendungen mithilfe von Container-Technologie vereinfacht. Mit Docker-Containern können Entwickler Anwendungen und ihre Abhängigkeiten in portable Container verpacken und so Konsistenz über verschiedene Umgebungen hinweg sicherstellen.
Sie führen docker exec auf einem VPS aus? Stellen Sie sicher, dass Ihr Server über genügend Ressourcen verfügt, und werfen Sie einen Blick auf Docker-VPS-Hosting von BlueVPS.
Was macht docker exec?
Einer der wichtigsten Docker-Befehle ist docker exec, mit dem Benutzer Befehle in einem laufenden Container ausführen können. Diese Funktion ermöglicht die direkte Interaktion mit den Prozessen und der Umgebung des Containers und ist daher nützlich für die Fehlerbehebung oder die Verwaltung von Anwendungen.
Docker ist vielseitig und mit verschiedenen Betriebssystemen kompatibel, darunter Linux, Windows und macOS. Es kann sogar auf einem Virtual Private Server (VPS) installiert werden. Für die Einrichtung von Docker müssen bestimmte Konfigurationsschritte befolgt werden, die auf die gewählte Plattform zugeschnitten sind.
Wie verwendet man den Befehl docker exec?
Bevor Sie den Befehl docker exec verwenden, stellen Sie sicher, dass Docker ordnungsgemäß auf Ihrem System installiert ist. Ermitteln Sie anschließend den konkreten Container, in dem Sie den Befehl ausführen möchten.
In dieser Anleitung lernen Sie den Befehl docker exec kennen. Wir zeigen anhand verschiedener Anwendungsfälle, wie Sie docker exec als root in einem Docker-Container ausführen.
Voraussetzungen
- Vergewissern Sie sich, dass die neueste Version von Ubuntu auf Ihrem System installiert ist.
- Installieren Sie Docker gemäß den Schritten in der offiziellen Docker-Dokumentation.
- Fügen Sie Ihren Benutzer der Docker-Gruppe hinzu, um Docker-Befehle ausführen zu können, ohne jedes Mal das Administratorpasswort eingeben zu müssen.
Einen Docker-Container starten
Um die Verwendung des Befehls docker exec zu veranschaulichen, starten wir zunächst einen Container.
Laden Sie zunächst ein Image in einen Docker-Container herunter:
# docker pull redis
Hier ein Beispiel mit einem Redis-Container:
# docker run -d --name myredis redis
Dieser Befehl startet einen Redis-Container im Detached-Modus (Flag -d), sodass er im Hintergrund läuft. Der Container mit dem Namen myredis dient als Beispielumgebung für die Ausführung von Befehlen.
Befehle in einem Docker-Container ausführen (Docker-Container)
Um Befehle in einem Container auszuführen, benötigen Sie zunächst dessen Container-ID. Die Container-ID finden Sie, indem Sie alle laufenden Container mit folgendem Befehl auflisten:
# docker ps
Sobald Sie die Container-ID haben (z. B. 6a8b7d170a12), können Sie damit Befehle im Container ausführen.

Syntax des Befehls docker exec (docker exec als root)
Die allgemeine Syntax des Befehls docker exec lautet:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Hier sind die häufig verwendeten Optionen:
-d, --detach: Runs the command in the background.
--detach-keys: Sets a custom key sequence to detach from the container.
-e, --env: Specifies environment variables for the command.
--env-file: Loads environment variables from a file.
-i, --interactive: Keeps the standard input (STDIN) open even if not attached to a terminal.
--privileged: Grants the command extended privileges.
-t, --tty: Allocates a pseudo-terminal for the command.
-u, --user: Runs the command as a specific user or UID.
-w, --workdir:Sets the working directory inside the container for the command.
docker exec im nicht-interaktiven Modus in einem Container ausführen (docker exec in den Container)
Im nicht-interaktiven Modus können Sie einen einzelnen Befehl in einem laufenden Container ausführen. Um beispielsweise die Redis-Version in einem laufenden Container zu prüfen, verwenden Sie folgenden Befehl:
# docker exec <container_id> redis-server --version
Dieser Befehl führt redis-server --version im angegebenen Container aus (ersetzen Sie <container_id> durch die tatsächliche ID, z. B. 6a8b7d170a12). Er ruft die Redis-Version ab und zeigt sie direkt in Ihrem Terminal an.
Befehle in einer interaktiven Shell ausführen
Im interaktiven Modus können Sie eine Shell-Sitzung in einem Container öffnen, um mehrere Befehle auszuführen und die Umgebung des Containers zu erkunden. Für den Zugriff auf eine interaktive Shell verwenden Sie folgende Syntax:
docker exec -it CONTAINER COMMAND [ARG...]
Um beispielsweise eine Shell in einem laufenden Redis-Container zu öffnen, verwenden Sie:
# docker exec -it 6a8b7d170a12 bash
Ersetzen Sie <container_id> durch die ID Ihres Redis-Containers (z. B. 6a8b7d170a12). Dieser Befehl öffnet eine Shell-Sitzung im Container, in der Sie mit der Umgebung interagieren und mehrere Befehle ausführen können.
Beispiel: Einen Befehl in der interaktiven Shell ausführen (Docker bash)
Sobald Sie sich in der Shell befinden, können Sie Redis-spezifische Befehle ausführen. Zum Beispiel:
# redis-cli ping
Dieser Befehl prüft den Status des im Container laufenden Redis-Servers und gibt PONG zurück, wenn er ordnungsgemäß funktioniert. Sie können nun bei Bedarf das Dateisystem und die Umgebung des Containers erkunden.

docker exec als anderer Benutzer ausführen (docker exec als Benutzer)
Standardmäßig werden Befehle mit docker exec im Container als root ausgeführt. Sie können jedoch einen anderen Benutzer für den Befehl angeben. Um einen Befehl als bestimmter Benutzer auszuführen, verwenden Sie folgende Syntax:
docker exec -u USERNAME CONTAINER COMMAND [ARG...]
Um beispielsweise den Befehl „whoami“ als Redis-Benutzer in einem Redis-Container auszuführen, verwenden Sie:
# docker exec -u redis 6a8b7d170a12 whoami

Befehle mit Umgebungsvariablen ausführen
Sie können Befehle in einem Container ausführen und dabei bestimmte Umgebungsvariablen setzen. Verwenden Sie dazu folgende Syntax:
docker exec -e VAR_NAME=VAR_VALUE CONTAINER COMMAND [ARG...]
Um beispielsweise den Befehl env in einem Redis-Container mit einer benutzerdefinierten Umgebungsvariable auszuführen, verwenden Sie:
# docker exec -e MY_VARIABLE='testing_env' <container_id> env
Damit wird MY_VARIABLE auf testing_env gesetzt und anschließend der Befehl env ausgeführt, der die Umgebungsvariablen des Containers anzeigt. Diese Methode ist nützlich, um sensible Daten wie API-Schlüssel sicher an einen Container zu übergeben, ohne sie in der Umgebung des Containers offenzulegen.
Docker-exec-Beispiele (typische Anwendungsfälle)
Mit dem Befehl docker exec können Sie Befehle in einem aktiven Docker-Container ausführen, ohne ihn zu stoppen oder neu zu starten. Er wird häufig für Fehlerbehebung, Wartung, Diagnose und einmalige administrative Vorgänge eingesetzt. Ein typisches Beispiel für docker exec ist das Öffnen einer interaktiven Shell in einem laufenden Container, um Dateien zu untersuchen, Prozesse zu überprüfen oder Anwendungsprobleme zu beheben.
Typische Anwendungsfälle für docker exec sind:
1. Eine Shell in einem laufenden Container öffnen.
Verwenden Sie docker exec -it mit Bash oder einer anderen Shell, um Dateien, Prozesse, Berechtigungen und die Container-Umgebung zu untersuchen.
2. Konfigurationsdateien anzeigen.
Administratoren können Anwendungseinstellungen, Umgebungsvariablen, eingebundene Verzeichnisse und Dateiberechtigungen überprüfen. Manuelle Änderungen können verloren gehen, wenn der Container neu erstellt wird, daher sollten dauerhafte Anpassungen in das Image oder die eingebundene Konfiguration übernommen werden.
3. Datenbankbefehle ausführen.
docker exec eignet sich zum Starten von Datenbank-Clients, zum Ausführen von SQL-Abfragen, zum Anwenden von Migrationen, zum Erstellen von Backups oder für Wartungsaufgaben.
4. Systeminformationen prüfen.
Befehle wie ps, top, df, free und env helfen bei der Diagnose von Ressourcenauslastung, laufenden Prozessen, Speicherplatz und Umgebungseinstellungen.
5. Anwendungs-Caches leeren.
Framework-spezifische Cache-Befehle können nach Änderungen an Code, Routing, Templates oder Konfiguration ausgeführt werden.
6. Netzwerkverbindungen testen.
Tools wie curl, ping, wget oder nslookup helfen dabei, Verbindungen zwischen Containern, Datenbanken, APIs und externen Diensten zu überprüfen.
7. Wartungsskripte ausführen.
Sie können Datenimporte, Korrekturen von Berechtigungen, Queue-Befehle, Tests geplanter Aufgaben und andere einmalige Vorgänge ausführen.
Diese Docker-exec-Beispiele zeigen, warum der Befehl für das Debugging und die Administration von Containern unverzichtbar ist. Er sollte jedoch hauptsächlich für temporäre Aufgaben verwendet werden, während dauerhafte Änderungen in das Dockerfile, die Docker-Compose-Konfiguration, Umgebungsvariablen oder eingebundene Volumes gehören.
So gelangen Sie in einen laufenden Docker-Container
Manchmal müssen Sie einen Blick in einen Container werfen, während die Anwendung noch läuft. Das kann notwendig sein, um Dateien zu prüfen, die Konfiguration zu kontrollieren, einen Befehl zu testen, Prozesse zu untersuchen oder die Ursache eines Fehlers zu finden. In den meisten Fällen gelangt man mit docker exec in einen Docker-Container, da sich damit eine Shell in einem bestehenden Container starten lässt, ohne ihn neu zu erstellen oder zu stoppen.
Prüfen Sie zunächst, welche Container derzeit aktiv sind:
docker ps
Kopieren Sie den Namen oder die ID des gewünschten Containers und öffnen Sie dann eine interaktive Shell:
docker exec -it container_name /bin/bash
Dieser Befehl erstellt eine Terminalsitzung im Container. Die Option -i hält den Eingabestrom offen, während -t eine nutzbare Terminaloberfläche bereitstellt.
Nicht jedes Image enthält Bash. Minimale Images, insbesondere solche auf Basis von Alpine Linux, bieten oft nur die Standard-Shell sh. Verwenden Sie in diesem Fall:
docker exec -it container_name /bin/sh
Dies ist der übliche Weg, wenn Sie per exec in einen Docker-Container gelangen müssen und Bash nicht verfügbar ist.
Manche Benutzer suchen nach „docker get into container“ oder „docker login into container“, doch diese Formulierungen können irreführend sein. Der Befehl docker login öffnet keinen Container. Er dient zur Authentifizierung bei Docker Hub oder einer anderen Container-Registry. Um auf die Umgebung eines laufenden Containers zuzugreifen, ist docker exec der richtige Befehl.
Bei einem Dienst, der mit Docker Compose gestartet wurde, ist die Syntax etwas anders:
docker compose exec service_name sh
Sobald Sie sich im Container befinden, können Sie Verzeichnisse untersuchen, Diagnosetools ausführen, Umgebungsvariablen überprüfen oder einmalige Wartungsaufgaben durchführen. Um die Shell zu schließen, geben Sie exit ein oder drücken Sie Strg + D. Dadurch wird nur die interaktive Sitzung beendet, der Container selbst läuft weiter.
Docker-exec-Shell: Bash vs. sh
Bei der Verwendung einer Shell über docker exec ist eine der ersten Entscheidungen, ob Sie bash oder sh starten. Die richtige Wahl hängt vom Betriebssystem und den im Container-Image enthaltenen Tools ab.
Bash ist eine funktionsreiche Shell, die häufig in Ubuntu, Debian und ähnlichen Distributionen verfügbar ist. Sie unterstützt Befehlsverlauf, Tab-Vervollständigung, Aliase, Skriptfunktionen und weitere Werkzeuge, die Fehlerbehebung und Administration komfortabler machen. Wenn Sie Bash in einem laufenden Container starten möchten, ist dies in der Regel die bevorzugte Option:
docker exec -it container_name /bin/bash
Viele schlanke Images wie Alpine Linux enthalten Bash jedoch nicht, um die Image-Größe gering zu halten. Stattdessen bieten sie die POSIX-kompatible Shell sh, die für die meisten administrativen Aufgaben ausreicht:
docker exec -it container_name /bin/sh
Wenn Sie nicht sicher sind, welche Shell verfügbar ist, versuchen Sie es zuerst mit Bash. Gibt der Befehl einen Fehler zurück, der darauf hinweist, dass /bin/bash nicht existiert, verwenden Sie stattdessen einfach sh. Dieser Ansatz funktioniert mit den meisten minimalen Docker-Images.
In der Praxis können Sie mit beiden Shells Dateien untersuchen, Logs prüfen, Konfigurationen bearbeiten und Befehle in einem Container ausführen. Bash bietet ein komfortableres interaktives Erlebnis, während sh maximale Kompatibilität über verschiedene Container-Images hinweg gewährleistet.
Docker exec vs. Docker run vs. Docker attach
Docker bietet mehrere Befehle für die Interaktion mit Containern, doch sie lösen unterschiedliche Aufgaben. Wenn Sie wissen, wann Sie welchen Befehl einsetzen, vermeiden Sie häufige Fehler, insbesondere bei der Fehlerbehebung oder der Verwaltung von Produktiv-Workloads.
|
Befehl |
Funktion |
Erstellt einen neuen Container |
Arbeitet mit einem laufenden Container |
Typischer Anwendungsfall |
|
docker run |
Erstellt und startet einen neuen Container aus einem Image |
Ja |
Nein |
Starten einer Anwendung oder eines Dienstes |
|
docker exec |
Startet einen neuen Befehl oder eine Shell in einem bestehenden Container |
Nein |
Ja |
Debugging, Wartung, Ausführen einmaliger Befehle |
|
docker attach |
Verbindet sich mit dem Hauptprozess des Containers und dessen Standardein- und -ausgabe |
Nein |
Ja |
Anzeigen der primären Anwendung oder Interaktion mit ihr |
Für die meisten Administrations- und Fehlerbehebungsaufgaben ist docker exec die empfohlene Wahl, da Sie damit in einem laufenden Container arbeiten können, ohne dessen Hauptprozess zu beeinträchtigen.
Fazit
Diese Anleitung hat verschiedene Möglichkeiten zur Interaktion mit Docker-Containern behandelt, darunter das nicht-interaktive Ausführen von Befehlen, den Zugriff auf eine interaktive Shell, die Verwendung von Umgebungsvariablen sowie das Ausführen von docker exec als root und als anderer Benutzer. Diese Methoden bieten Flexibilität bei der Verwaltung von Docker-Containern. Weitere Details finden Sie in der offiziellen Dokumentation zu docker exec.
Sie benötigen eine zuverlässige Umgebung für Ihre Container? Stellen Sie Ihre Docker-Instanzen auf den Hochleistungsservern von BlueVPS.com bereit, mit unbegrenztem Traffic, skalierbaren Ressourcen und einer dedizierten Hosting-Umgebung.
Blog