¿Cómo verificar las conexiones de red establecidas dentro de Docker?

Vea y administre las conexiones de red establecidas por un contenedor Docker.

A menudo, mientras trabajamos con un contenedor Docker, debemos observar las conexiones de red que utiliza el contenedor para la depuración inicial o la resolución de problemas. Es posible que desee ver qué IP está escuchando en un puerto o cuántas conexiones están actualmente activas en el contenedor.

Dado que Docker es un entorno aislado, ejecutar netstat en un servidor no le proporcionará conexiones de red del contenedor. En cambio, debe ingresar a un contenedor para ejecutar netstat o ejecutarlo de forma remota.

Veamos ambas opciones…

# 1. Entrar al contenedor Docker para ejecutar netstat

Como primer paso, busque el ID de contenedor del contenedor que desea solucionar.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
0ce7cfb9be37   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   web-server
4ab8551671d7   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   80/tcp               vigilant_ganguly
$

Aquí el que quiero solucionar es el contenedor con ID 0ce7cfb9be37. Ahora, para obtener una sesión de shell (bash) de este contenedor, use:

$ docker exec -it 0ce7cfb9be37 bash

Esto debería llevarlo a un indicador bash dentro del contenedor.

[email protected]:/#

Puede instalar el paquete netstat para buscar conexiones de red establecidas. De forma predeterminada, es posible que estas utilidades no estén disponibles dentro del contenedor.

Entonces, para instalarlo, use:

apt update
apt install net-tools

Ahora, podemos usar el comando netstat como de costumbre.

# netstat -an

Producción:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 172.17.0.3:80           223.233.99.46:64429     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4811      ESTABLISHED
tcp        0      0 172.17.0.3:80           223.233.99.46:64430     FIN_WAIT2
tcp        0      0 172.17.0.3:80           223.233.99.46:4810      ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         STREAM     CONNECTED     35748
unix  3      [ ]         STREAM     CONNECTED     35749

Como puede ver en el resultado anterior, se enumeran las conexiones establecidas con sus direcciones de origen y destino. Para ver los procesos que escuchan en los puertos, puede usar:

# netstat -tulnp

Producción:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp6       0      0 :::80                   :::*                    LISTEN      1/nginx: master pro

# 2. Ejecuta netstat sin entrar al contenedor

Lo primero es lo primero, necesitamos obtener la ID del contenedor con el comando docker ps.

[[email protected] ~]# docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED      STATUS      PORTS                    NAMES
e5db9a01d4a8   postgres:13.1-alpine       "docker-entrypoint.s…"   9 days ago   Up 9 days   0.0.0.0:5432->5432/tcp   relicflare_server_postgres
[[email protected] ~]#

Y luego ejecute el comando docker como se muestra a continuación para averiguar todas las conexiones establecidas para el contenedor.

docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

Esto daría como resultado algo como a continuación.

[[email protected] ~]# docker exec e5db9a01d4a8 netstat | grep ESTABLISHED
tcp        0      0 e5db9a01d4a8:postgresql 161.35.XXX.XXX:49128    ESTABLISHED 
udp        0      0 localhost:48818         localhost:48818         ESTABLISHED 
[[email protected] ~]# 

Entonces, la idea es ejecutar el comando netstat junto con el comando docker exec.

Conclusión

Ahora que tiene los detalles de conexión requeridos, puede continuar con la solución de problemas mirando más a fondo los registros de procesos y la ventana acoplable.

Publicaciones relacionadas

Botón volver arriba