Network-Multitool — инструмент для отладки Docker контейнеров

Если вам нужно продебажить какой-то контейнер, в котором нет никаких инструментов для диагностики (а это почти всегда так), то для этого можно воспользоваться специально собранным для этих целей контейнером — Network-Multitool. Его ещё любят в кубернетисе запускать для отладки. Известная штука.

Работает он примерно так. Запускаем контейнер, внутри которого ничего нет, кроме 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 и т.д.

Network-Multitool

Я тут выбрал самую жирную сборку 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

На хост ничего ставить не надо. Полезная штука, берите на вооружение.