К заметкам на тему дебага Docker контейнеров, когда мы к ним цепляемся и запускаем различные утилиты, были комментарии на тему того, что можно просто подключиться к пространству имён (namespace) контейнера с хоста и запустить всё, что нужно.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Мне лично идея со специальными контейнерами кажется более удобной, потому что там все инструменты уже собраны и на сам хост ничего ставить не надо. Но для полноты картины расскажу и про способ с namespaces. Там всё очень просто.
Узнаём PID процесса в контейнере nginx:
# docker inspect -f '{{ .State.Pid }}' nginx 1009
Запускаем нужную нам утилиту в пространстве контейнера:
# nsenter -n -t 1009 netstat -tulnp
Соответственно, видим процесс nginx, слушающий 80-й порт.
Так можно любую утилиту с хоста запустить. Вот вариант в одну строку:
# nsenter -n -t $(docker inspect -f '{{ .State.Pid }}' nginx) ip a
Сразу увидели ip адрес контейнера. Это то же самое, что:
# docker inspect -f '{{ .NetworkSettings.Networks.bridge.IPAddress }}' nginx
Какую команду проще и быстрее запомнить, судить не берусь. Правда, конкретно с IP я смотрю вот так:
# docker inspect nginx | grep IP
Сразу видно адрес. Думаю, идею поняли. Вот ещё пример. Надо посмотреть, как и через какой dns контейнер резолвит домены:
# nsenter -n -t $(docker inspect -f '{{ .State.Pid }}' nginx) dig ya.ru MX
Не нужны никакие дополнительные настройки и инструменты. Всё работает с хоста, где запущены контейнеры.