Table of Contents
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.