Для решения этой задачи создана программа cdebug. С её помощью можно подцепиться к контейнеру и выполнить диагностику. Например, запустить там
ps axf и посмотреть, что и с какими параметрами запущено. Либо любую другую утилиту - ls, top, awk и т.д. Для работы с cdebug достаточно скачать один бинарник, написанный на GO. Идём в релизы и скачиваем для Linux архив cdebug_linux_amd64.tar.gz. Далее покажу на примере контейнера nginx.
# docker run --name nginx -d -p 8080:80 nginx# docker exec -it nginx bash# ps axfbash: ps: command not foundВ образе нет ps. Подключаемся через cdebug:
# cdebug exec -it nginx# ps axfPID USER TIME COMMAND 1 root 0:00 nginx: master process nginx -g daemon off; 28 nginx 0:00 nginx: worker process 29 nginx 0:00 nginx: worker process 30 nginx 0:00 nginx: worker process 31 nginx 0:00 nginx: worker process 39 root 0:00 sh /.cdebug-entrypoint.sh 47 root 0:00 sh 48 root 0:00 ps axfПосмотрели список процессов. При этом исходный контейнер не перезапускается, к нему не подключаются никакие volumes, корневая файловая система cdebug та же самая, что и у контейнера. Работает cdebug на базе busybox.
Кроме подключения к контейнеру, cdebug может на ходу опубликовать порты контейнера, которые не были опубликованы при запуске. Принцип работы программы описан в репозитории, но если честно, я не очень понял полную реализацию.
⇨ Исходники
#docker #devops