User Tools

Site Tools


visualizar_sockets_en_entornos_docker

Listar los sockets / conexiones usadas en entornos Docker

El funcionamiento de docker se basa en el uso de espacios de nombres y reglas de iptables/netfilter. Con los comandos nsenter y contrack es por tanto factible encontrar las conexiones que un host con docker ha establecido, ya sean internas o externas.

nsenter

Este comando recorre todos los namespace de los contenedores para buscar, en este caso mediante “netstat -putan” sus sockets. Por supuesto podría usarse cualquier otro comando para obtener información sobre el proceso, por ejemplo lsof y averiguar qué ficheros tiene abiertos.

 # Analiza el espacios de nombres de todos los contenedores del host
for i in `docker ps -q` ; do sudo nsenter -t $(docker inspect -f '{{.State.Pid}}' $i) -n netstat -putan ; done
 
# Analiza un solo contenedor: Se puede usar el ID o el nombre,
docker inspect -f '{{.State.Pid}}' XXXX

conntrack

Si se quiere obtener todavía más información o información no mostrada por el método anterior, se puede hacer uso de conntrack-tools para consultar a iptables. Dependiendo de la versión de Docker y como se configure el entorno, no todas las conexiones que se listen en los contenedores serán todas las existentes. Esto se debe a que se delegan ciertas tareas a iptables, que a su vez implementa NAT/SNAT.

conntrack -L     # Muestra las conexiones del firewall
 
# Algunos filtros útiles:
conntrack -L --any-nat # Muestra cualquier asociación NAT
conntrack -L --src-nat # Asociaciones de conexiones salientes desde los contenedores hacia el exterior usando MASQUERADE.
conntrack -L --dst-nat # Asociaciones de conexiones entrantes desde el exterior a los contenedores que se están editando con DNAT.
# Si se quiere ver en modo evento simplemente usar -E en vez de -L. El fichero /proc/net/nf_conntrack puede mostrar la misma información, pero el nombre puede varias dependiendo de la distro usada.
visualizar_sockets_en_entornos_docker.txt · Last modified: 2023/10/19 23:16 by busindre