• ¡Obtenga la seguridad de la aplicación de la manera correcta! Detectar, proteger, monitorear, acelerar y más ...
  • 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 activas actualmente en el contenedor.

    Desde un Docker es un entorno aislado, ejecutar netstat en un servidor no le dará conexiones de red del contenedor. En su lugar, debe ingresar a un contenedor para ejecutar netstat o ejecutarlo de forma remota.

    Veamos ambas opciones ...

    # 1. Entrar en el contenedor de 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 de bash dentro del contenedor.

    [email protected]:/#

    Puedes instalar el netstat paquete 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 netstat comando como de costumbre.

    # netstat -an

    Salida:

    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 la salida 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

    Salida:

    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. Ejecute netstat sin entrar en el contenedor

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

    [[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 conocer todas las conexiones establecidas para el contenedor.

    docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

    Esto resultaría en 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 docker exec mando.

    Conclusión

    Ahora que tiene los detalles de conexión requeridos, puede continuar con la resolución de problemas consultando más en la ventana acoplable y los registros de proceso.