← retour aux snippets

nsenter: entrer dans les namespaces d'un PID

Attacher un shell au network/mount/uts/pid namespace d'un processus (ex: container) via nsenter.

bash containers #nsenter#namespace#debug

objectif

Déboguer un espace de noms réseau/montages d’un processus en entrant “à l’intérieur” sans docker/ctr.

code minimal

# ouvrir un shell dans tous les namespaces du PID
sudo nsenter --target "$PID" --mount --uts --ipc --net --pid -- bash -l

utilisation

# trouver le PID du process (ex: nginx)
PID="$(pgrep -xo nginx)"
sudo nsenter --target "$PID" --mount --net -- bash -l

# vérifier interfaces réseau et routes du namespace
ip addr
ip route

# voir les montages isolés
mount | head

variante(s) utile(s)

# exécuter une commande unique (ici: traceroute interne)
sudo nsenter --target "$PID" --net -- traceroute -n data.pm

# changer seulement le namespace réseau
sudo nsenter -t "$PID" -n bash -c 'ip a; ip r'

notes

  • nécessite les privilèges root sur l’hôte.
  • pratique pour des containers démarrés par d’autres runtimes (systemd-nspawn, containerd, cri-o).
  • complémentaire à ip netns (namespaces nommés).