Suche…


Syntax

  • Docker-Statistiken [OPTIONEN] [CONTAINER ...]
  • Andockprotokolle [OPTIONEN] CONTAINER
  • Dockeroberteil [OPTIONEN] CONTAINER [ps OPTIONEN]

Eingabe in einen laufenden Container

Verwenden Sie zum Ausführen von Vorgängen in einem Container den Befehl docker exec . Manchmal wird dies als "Eintreten in den Container" bezeichnet, da alle Befehle innerhalb des Containers ausgeführt werden.

docker exec -it container_id bash

oder

docker exec -it container_id /bin/sh

Und jetzt haben Sie eine Shell in Ihrem laufenden Container. Listen Sie beispielsweise Dateien in einem Verzeichnis auf und verlassen Sie den Container:

docker exec container_id ls -la

Sie können das -u flag , um den Container mit einem bestimmten Benutzer uid=1013 , z. B. uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

Die uid und gid müssen nicht im Container vorhanden sein, der Befehl kann jedoch zu Fehlern führen. Wenn Sie einen Container starten und sofort hineingeben möchten, um etwas zu überprüfen, können Sie dies tun

docker run...; docker exec -it $(docker ps -lq) bash

Der Befehl docker ps -lq gibt nur die ID des zuletzt -lq Containers (l in -lq ) aus. (Dies setzt voraus, dass Sie bash als Interpreter in Ihrem Container haben. Sie haben möglicherweise sh oder zsh oder einen anderen.)

Überwachung der Ressourcennutzung

Die Überprüfung der Verwendung von Systemressourcen ist ein effizienter Weg, um fehlerhafte Anwendungen zu finden. Dieses Beispiel entspricht dem traditionellen Befehl top für Container:

docker stats

Um die Statistiken bestimmter Container zu verfolgen, listen Sie sie in der Befehlszeile auf:

docker stats 7786807d8084 7786807d8085

Docker-Statistiken zeigen die folgenden Informationen an:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

Standardmäßig zeigt docker stats die ID der Container an. Dies ist nicht sehr hilfreich. Wenn Sie die Namen der Container anzeigen möchten, tun Sie dies einfach

docker stats $(docker ps --format '{{.Names}}')

Prozesse in einem Container überwachen

Die Überprüfung der Verwendung von Systemressourcen ist eine effiziente Methode, um ein Problem in einer live laufenden Anwendung einzugrenzen. Dieses Beispiel entspricht dem traditionellen Befehl ps für Container.

docker top 7786807d8084

Um die Ausgabe zu filtern, fügen Sie der Befehlszeile ps Optionen hinzu:

docker top 7786807d8084 faux

Oder um die Liste der Prozesse als root abzurufen, was eine potenziell schädliche Praxis ist:

docker top 7786807d8084 -u root

Der docker top Befehl des Dockers ist besonders nützlich, wenn minimalistische Container ohne Shell oder mit dem Befehl ps .

An einen laufenden Container anhängen

"Anhängen an einen Container" ist das Starten einer Terminalsitzung innerhalb des Kontexts, in dem der Container (und alle darin enthaltenen Programme) ausgeführt wird. Dies wird hauptsächlich zu Debugging-Zwecken verwendet, kann aber auch erforderlich sein, wenn bestimmte Daten an Programme übergeben werden müssen, die im Container ausgeführt werden.

Der Befehl zum attach wird dazu verwendet. Es hat diese Syntax:

docker attach <container>

<container> kann entweder die Container-ID oder der Containername sein. Zum Beispiel:

docker attach c8a9cf1a1fa8

Oder:

docker attach graceful_hopper

Abhängig von Ihrem Benutzer und der Einrichtung des sudo die obigen Befehle möglicherweise erneut sudo .

Anmerkung: Mit "Anhängen" kann nur eine einzelne Shell-Sitzung zu einem Zeitpunkt an einen Container angehängt werden.

Achtung: Alle Tastatureingaben werden an den Container weitergeleitet. Wenn Sie Strg-c drücken , wird der Container gelöscht.

Um sich von einem angefügten Container zu lösen, drücken Sie nacheinander die Tasten Strg-p und dann Strg-q

Um mehrere Shellsitzungen an einen Container anzuhängen, oder einfach als Alternative, können Sie exec . Verwenden der Container-ID:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Verwenden des Containernamens:

docker exec -i -t graceful_hopper /bin/bash

exec führt ein Programm innerhalb eines Containers aus, in diesem Fall /bin/bash (eine Shell (vermutlich eine des Containers)). -i bezeichnet eine interaktive Sitzung, während -t einen Pseudo-TTY zuweist.

Hinweis: Im Gegensatz zu attach wird durch Drücken von Strg-c der Befehl " exec " d nur bei interaktiver Ausführung beendet.

Protokolle drucken

Das Aufrufen der Protokolle ist die weniger aufdringliche Art, eine Live-Anwendung zu debuggen. In diesem Beispiel wird das Verhalten des traditionellen 7786807d8084 tail -f some-application.log im Container 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Dieser Befehl zeigt im Wesentlichen die Standardausgabe des Containerprozesses (des Prozesses mit PID 1).

Wenn Ihre Protokolle keine Zeitmarke enthalten, können Sie das Flag --timestamps hinzufügen.

Es ist auch möglich, die Protokolle eines angehaltenen Containers anzuzeigen

  • Starten Sie den fehlerhaften Container mit docker run ... ; docker logs $(docker ps -lq)

  • Finden Sie die Container-ID oder den Namen mit

docker ps -a

und dann

docker logs container-id oder

docker logs containername

Es ist möglich, die Protokolle eines angehaltenen Containers anzuzeigen

Docker-Containerprozess-Debugging

Docker ist nur eine ausgefallene Möglichkeit, einen Prozess auszuführen, keine virtuelle Maschine. Daher ist das Debuggen eines Prozesses "in einem Container" auch "auf dem Host" möglich, indem der laufende Containerprozess als Benutzer mit den entsprechenden Berechtigungen zum Überprüfen dieser Prozesse auf dem Host (z. B. root) untersucht wird. Es ist beispielsweise möglich, jeden "Containerprozess" auf dem Host ps indem Sie ein einfaches ps als root ps :

sudo ps aux

Alle derzeit laufenden Docker-Container werden in der Ausgabe aufgeführt.

Dies kann während der Anwendungsentwicklung hilfreich sein, um einen in einem Container ausgeführten Prozess zu debuggen. Als Benutzer mit entsprechenden Berechtigungen können für den Containerprozess typische Debugging-Dienstprogramme verwendet werden, z. B. strace, ltrace, gdb usw.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow