Отладка контейнера без перезапуска (docker exec, nsenter)

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockernsenterотладка

👁 В проде бывает ситуация: контейнер работает, но внутри что-то странно себя ведёт — тормозит сервис, завис процесс или непонятно, что происходит с файлами. Перезапускать контейнер нельзя, потому что это боевой сервис. В таких случаях можно зайти внутрь контейнера и анализировать систему прямо на лету.

📝 Подключение к работающему контейнеру для диагностики

Самый простой способ посмотреть, что происходит внутри — подключиться к контейнеру через docker exec. Это позволяет запустить shell и проверить процессы, файлы и сеть.

docker exec -it my_container sh
ps aux
df -h
netstat -tulpn

Так можно быстро понять, какие процессы работают, что происходит с диском и какие порты реально слушает приложение.

📝 Подключение к namespace контейнера через nsenter

Если внутри контейнера нет нужных утилит (что часто бывает в минимальных образах), можно зайти в его namespace прямо с хоста.

PID=$(docker inspect --format '{{.State.Pid}}' my_container)
sudo nsenter -t $PID -n -p -m -u -i

Теперь ты оказываешься в том же сетевом, файловом и процессном пространстве, что и контейнер, но со всеми инструментами хоста.

❗️ Такой подход позволяет дебажить контейнеры без пересборки образа и без остановки сервиса — что часто критично в продакшене.

tags: #docker #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот терминала с командами для диагностики контейнера: docker exec, ps, df, netstat и nsenter; тёмный фон и логотип RECURA.
Терминал с рабочими командами для отладки контейнера и брендингом RECURA.

Дискуссия

Иван Ефимов
nsenter -upmint $PID так будет работать? и лучше алиас написать docker_nsenter my_container
RECURA » CHAT
Иван Ефимов
nsenter -upmint $PID так будет работать? и лучше алиас написать docker_nsenter my_container
Через alias - хорошее предложение. Аргументы объединять можно, ещё вот такой вариант есть: nsenter -t $PID -a
Иван Ефимов
RECURA » CHAT
Через alias - хорошее предложение. Аргументы объединять можно, ещё вот такой вариант есть: nsenter -t $PID -a
-at $PID тоже будет работать имхо
Присоединиться к обсуждению →

Читайте так же