Comment savoir si un pid tourne dans un container?

Bonjour,
La fonction ps retourne la liste des processus en cours mais je ne trouve pas d’option qui permette d’afficher le container éventuel dans lequel tourne les processus. Y a-t-il une option de ps que je n’ai pas trouvée? Une autre commande?
Merci d’avance.

Bonjour,

Tu peux faire afficher le cgroup par ps, les processus d’un conteneur docker par exemple sont dans un groupe de contrôle séparé.

Par exemple j’ai lancé un conteneur docker dans lequel j’ai démarré le serveur openssh-server, je repère son PID:

alex-boulot@debian-probook:~$ sudo ps aux | grep sshd
root       708  0.0  0.0  15948  4520 ?        Ss   01:30   0:00 /usr/sbin/sshd -D
root     21570  0.0  0.0  15856  2540 ?        Ss   16:31   0:00 /usr/sbin/sshd
alex-bo+ 21775  0.0  0.0   6092   824 pts/4    S+   16:36   0:00 grep sshd

Du coup je sais que c’est le processus 21570, vu l’heure, le 708 est le PID du serveur SSH de ma machine hôte.
Tu peux comparer les 2 sorties de ps:

alex-boulot@debian-probook:~$ sudo ps -o cgroup 21570
CGROUP
11:perf_event:/docker/9c8cd08741c8e0180c10c18b97536cdf78af36d8d9294e8dccc6dcadd67271d6,10:devices:/docker/9c8cd08741c8e0180c10c18b97536cdf78af36d8d9294e8dccc6dcadd67271d6,9:blk

alex-boulot@debian-probook:~$ sudo ps -o cgroup 708
CGROUP
10:devices:/system.slice/ssh.service,9:blkio:/system.slice/ssh.service,7:cpu,cpuacct:/system.slice/ssh.service,5:pids:/system.slice/ssh.service,3:memory:/system.slice/ssh.servi

Je t’avoue que la sortie de ces commandes reste assez obscure pour moi, mais on voit qu’il y a « docker » dans la sortie de la 1ère commande.

Tu dois pouvoir bricoler quelque chose avec ps pour afficher les cgroup de tous les processus et filtrer la sortie selon qu’elle contienne « docker » ou non. Je ne sais pas ce que ça vaut comme technique, c’est surtout une idée comme ça.

PS: si tu connais le PID du processus, systemctl status affiche aussi le CGroup:

alex-boulot@debian-probook:~$ systemctl status 21570
● containerd.service - containerd container runtime
   Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-16 23:31:17 CEST; 17h ago
     Docs: https://containerd.io
  Process: 689 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
 Main PID: 698 (containerd)
    Tasks: 30
   Memory: 65.8M
   CGroup: /system.slice/containerd.service
           ├─  698 /usr/bin/containerd
           ├─21088 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/9c8cd08741c8e0180c10c18b97536cdf78af36d8d9294e8dccc6dcadd672
           ├─21104 bash
           ├─21243 /bin/bash
           └─21570 /usr/sbin/sshd

De même, systemctl status containerd affiche les PID de ses processus fils, qui sont donc exécutés dans un conteneur.

3 J'aime

Sinon le but est de tracer tes containers, avec docker tu as la possibilité de passer par un docker ps ou un docker ps -a.

un gros +1 pour le systemctl status sur le pid :wink:

1 J'aime

Merci à vous deux Sputnik93 et Clochette

  • ps -o cgroup permet de répondre à ma question

Par contre je n’utilise pas Docker ja vais regarder de ce côté ou installer lxc-ps?