• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • Affichez et gérez les connexions réseau établies par un conteneur Docker.

    Souvent, lorsque nous travaillons avec un conteneur Docker, nous devons examiner les connexions réseau utilisées par le conteneur à des fins de débogage initial ou de dépannage. Vous souhaiterez peut-être voir quelle adresse IP écoute sur un port ou combien de connexions sont actuellement actives dans le conteneur.

    Depuis un Docker est un environnement isolé, l'exécution de netstat sur un serveur ne vous donnera pas de connexions réseau du conteneur. Au lieu de cela, vous devez soit entrer dans un conteneur pour exécuter le netstat, soit l'exécuter à distance.

    Voyons les deux options…

    # 1. Accéder au conteneur Docker pour exécuter netstat

    Dans un premier temps, recherchez l'ID de conteneur du conteneur que vous souhaitez dépanner.

    $ 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
    $

    Ici, celui que je veux dépanner est le conteneur avec ID 0ce7cfb9be37. Maintenant, pour obtenir une session shell (bash) de ce conteneur, utilisez:

    $ docker exec -it 0ce7cfb9be37 bash

    Cela devrait vous amener dans une invite bash à l'intérieur du conteneur.

    [email protected]:/#

    Vous pouvez installer le netstat package pour rechercher les connexions réseau établies. Par défaut, ces utilitaires peuvent ne pas être disponibles à l'intérieur du conteneur.

    Alors pour l'installer, utilisez:

    apt update
    apt install net-tools

    Maintenant, nous pouvons utiliser le netstat commande comme d'habitude.

    # netstat -an

    Sortie :

    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

    Comme vous pouvez le voir sur la sortie ci-dessus, les connexions établies avec leurs adresses source et de destination sont répertoriées. Pour voir les processus en écoute sur les ports, vous pouvez utiliser:

    # netstat -tulnp

    Sortie :

    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. Exécutez netstat sans entrer dans le conteneur

    Tout d'abord, nous devons obtenir l'ID du conteneur avec le docker ps commander.

    [[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] ~]#
    

    Et puis exécutez le commande docker comme ci-dessous pour connaître toutes les connexions établies pour le conteneur.

    docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

    Cela donnerait quelque chose comme ci-dessous.

    [[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] ~]# 

    L'idée est donc d'exécuter la commande netstat avec le docker exec commander.

    Conclusion

    Maintenant que vous avez les détails de connexion requis, vous pouvez poursuivre votre dépannage en examinant plus en détail le docker et les journaux de processus.