При использовании Docker установленные соединения не отображаются в netstat
у меня есть контейнер docker, работающий на RHEL 7 с Docker 1.7.0. Программа, работающая в этом контейнере, прослушивает TCP-соединения на порту 5000. В моем Dockerfile я помещаю предложение EXPOSE 5000 и запускаю контейнер со следующей командой:
docker run
--name myProgram
--detach
--publish 5000:5000
--volume /home/docker/apps/myProgram/logs:/var/log/myProgram/
--volume /home/docker/apps/myProgram/conf:/usr/local/snnotificationreceiver/conf/
--restart always
10.167.152.15:5000/myProgram:1.0.0
когда я выполняю netstat на хосте, я вижу Listen socket:
[root@server bin]# netstat -naop | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 33595/docker-proxy off (0.00/0/0)
Я могу подключиться к приложению, подключившись к IP-адресу хоста на порту 5000 и данные, которые я отправляю в приложение прибывает. Я знаю это, потому что я вижу это в своих журналах приложений, приложение также отправляет данные через сокет. Однако я не вижу никаких установленных соединений с использованием netstat на хосте docker:
[root@server bin]# netstat -naop | grep ESTABLISHED
Я вижу установленное соединение на стороне клиента, которое не использует docker:
[root@client ~]# netstat -naop | grep 5000
tcp 0 0 10.167.43.73:39218 10.167.152.138:5000 ESTABLISHED 21429/telnet off (0.00/0/0)
Я не нашел эквивалента команды docker или аналогичного netstat Это нормально? Как я могу увидеть установленные соединения с контейнером или с докер-прокси?
спасибо
2 ответов
Вы можете:
docker exec <containerid> netstat -tan | grep ESTABLISHED
или если у вас нет netstat в образе docker:
docker inspect -f '{{.State.Pid}}' <containerid> # note the PID
sudo nsenter -t <pid> -n netstat | grep ESTABLISHED
nsenter является частью пакета util-linux. (плагиат @larsks)
вы можете использовать этот фрагмент, чтобы получить все установленные для всех докеров в одной строке (если у вас есть nsenter
)
docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
$(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
do
echo $dockid $name
sudo nsenter -t $dockpid -n netstat -pan | grep ESTABLISHED
done
обратите внимание на установленный в grep
.
вы можете переключиться на прослушивание соединения с netstat -pnl
и TCP и UDP
docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
$(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
do
echo $dockid $name
sudo nsenter -t $dockpid -n netstat -pnl
done
или только TCP слушайте
docker inspect --format '{{.State.Pid}} {{printf "%.13s" .ID}} {{.Name}}' \
$(docker ps --format '{{.ID}}') | while read dockpid dockid dockname
do
echo $dockid $name
sudo nsenter -t $dockpid -n netstat -pnlt
done