Если вам нужно продебажить какой-то контейнер, в котором нет никаких инструментов для диагностики (а это почти всегда так), то для этого можно воспользоваться специально собранным для этих целей контейнером - Network-Multitool. Его ещё любят в кубернетисе запускать для отладки. Известная штука.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Работает он примерно так. Запускаем контейнер, внутри которого ничего нет, кроме nginx:
# docker run --name nginx -d -p 8080:80 nginx # docker exec -it nginx bash # ps axf bash: ps: command not found
Подключаем к нему network-multitool:
# docker run --rm -it \ --network=container:nginx \ --pid container:nginx \ wbitt/network-multitool:alpine-extra bash
# ps axf PID TTY STAT TIME COMMAND 47 pts/0 Ss 0:00 bash 60 pts/0 R+ 0:00 \_ ps axf 1 ? Ss 0:00 nginx: master process nginx -g daemon off; 29 ? S 0:00 nginx: worker process 31 ? S 0:00 nginx: worker process 30 ? S 0:00 nginx: worker process 32 ? S 0:00 nginx: worker process
Дальше всё остальное можно запускать: ping, dig, tcpdump и т.д.
Я тут выбрал самую жирную сборку alpine-extra, где максимальный набор инструментов, в том числе tshark, ApacheBench, mysql и postgresql client, git и т.д. Если всё это не надо, то используйте alpine-minimal. Описание сборок в репозитории.
Похожую функциональность имеет cdebug. У него принцип работы такой же, только он для удобства собран в бинарник. А подключается он к контейнерам точно так же.
Кстати, с помощью network-multitool можно и хост дебажить, если не хочется его засорять различными утилитами. Запускаем его в сети хоста и пользуемся:
# docker run --rm -it --network=host wbitt/network-multitool:alpine-extra bash # tcpdump
На хост ничего ставить не надо. Полезная штука, берите на вооружение.