it-swarm.com.de

Docker-Containerprozesse finden? (aus Host Sicht)

Ich mache ein paar Tests an Docker und Containern und habe mich gefragt:

Gibt es eine Methode, die ich verwenden kann, um alle Prozesse, die einem Docker-Container nach Name oder ID zugeordnet sind, aus der Host-Sicht zu finden

Am Ende des Tages besteht ein Container aus virtualisierten Prozessen. 

24
Walid Ashraf

Sie können den docker top-Befehl ..__ verwenden. Dieser Befehl listet alle Prozesse auf, die in Ihrem Container ausgeführt werden.

Beispielsweise zeigt dieser Befehl für einen einzelnen Prozesscontainer in meiner Box Folgendes an:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14097               13930               0                   23:17               pts/6               00:00:00            /bin/bash

Alle Methoden, die von anderen erwähnt werden, sind auch möglich, aber diese sollte am einfachsten sein.

Update :

Um einfach die Hauptprozess-ID im Container abzurufen, verwenden Sie diesen Befehl:

 docker inspect -f '{{.State.Pid}}' <container id>
28
Boynux
  • Ermitteln Sie zunächst die Prozess-ID des Docker-Daemon-Prozesses.
  • Dann filtern Sie die Prozessliste, indem Sie nur Prozesse beibehalten, deren übergeordnete Prozess-ID die des Docker-Daemons ist.
  • Zum Schluss filtern Sie die internen Prozesse der Docker-Engine wie docker-proxy.

# PID of the docker daemon
ps aux | grep -E 'docker (-d|daemon)'
root       665  0.0  0.4 1521560 17156 ?       Ssl  janv.06   5:47 /usr/bin/docker -d -H fd://
# find child processes of the docker daemon
pgrep -P 665

4076

4135

4210

4226

4784

4788

# figure out details of a process
ps 4076
 PID TTY      STAT   TIME COMMAND
 4076 ?        Ssl   10:45 /usr/bin/redis-server 0.0.0.0:6379
# repeat for other child processes
10
Thomasleveil

Eine andere Möglichkeit, einen Überblick über alle Docker-Prozesse zu erhalten, die auf einem Host ausgeführt werden, ist die Verwendung von generischen cgroup-basierten systemd-Tools. 

systemd-cgls zeigt alle unsere cgroups und die darin ausgeführten Prozesse in einer Baumansicht an:

├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─docker
│ ├─070a034d27ed7a0ac0d336d72cc14671584cc05a4b6802b4c06d4051ce3213bd
│ │ └─14043 bash
│ ├─dd952fc28077af16a2a0a6a3231560f76f363359f061c797b5299ad8e2614245
│ │ └─3050 go-cron -s 0 0 * * * * -- automysqlbackup

Da jeder Docker-Container eine eigene cgroup hat, können Sie auf diese Weise auch Docker-Container und die entsprechenden Host-Prozesse sehen.

Zwei interessante Eigenschaften dieser Methode:

  1. Es funktioniert auch, wenn der Docker-Daemon nicht mehr funktionsfähig ist.
  2. Es ist eine ziemlich schnelle Übersicht.

Sie können auch systemd-cgtop verwenden, um einen Überblick über die Ressourcennutzung von Docker Containers zu erhalten, ähnlich wie top.

Übrigens: Da systemd-Dienste auch cgroups entsprechen, sind diese Methoden auch für nicht-Dockerized systemd-Dienste anwendbar.

9
Johannes Gehrs

docker ps listet die aktiven Docker-Container auf.

docker exec <id|name> ps informiert Sie über die laufenden Prozesse. 

2
Sobrique

Docker-Statistiken "Container-ID" Zeigt den Ressourcenverbrauch zusammen mit PID oder einfach Docker-PS an.

Wahrscheinlich kann dieser Spickzettel von Nutzen sein . http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/

0
Suma Ningaraju

Wenn Sie dies auf dem Host ausführen, erhalten Sie eine Liste der Prozesse, die in einem Container mit <Container ID> Ausgeführt werden, wobei Host-PIDs anstelle von Container-PIDs angezeigt werden.

DID=$(docker inspect -f '{{.State.Pid}}' <Container ID>);ps --ppid $DID -o pid,ppid,cmd
0
Beam