docker exec работает только если в образе есть шелл, а сам docker жив. nsenter заходит в те же namespaces напрямую через процесс на хосте — работает и для контейнеров без шелла (distroless-образы), и для разбора любых процессов, изолированных namespaces, не только Docker.

nsenter --target $(pgrep -f myservice) --mount --uts --ipc --net --pid -- /bin/sh

--target PID — чей namespace открываем, дальше флаги выбирают какие именно namespace’ы разделить: --net — сетевой стек контейнера, --mount — его файловую систему, --pid — его дерево процессов.

Практическое применение — диагностика упавшего distroless-контейнера: ip addr и ss -tlnp внутри его network namespace, без единого лишнего пакета внутри самого образа.

#linux #containers #nsenter