Visualisez et gérez les connexions réseau établies par un conteneur Docker.

Souvent, lorsque nous travaillons avec un conteneur Docker, nous avons besoin de voir les connexions réseau utilisées par le conteneur à des fins de débogage initial ou de dépannage. Vous pouvez vouloir voir quelle IP écoute sur un port ou combien de connexions sont actuellement actives dans le conteneur.

Étant donné qu’un Docker est un environnement isolé, l’exécution de netstat sur un serveur ne vous donnera pas les 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. Entrer dans un conteneur Docker pour exécuter netstat

Pour commencer, trouvez l’ID du conteneur que vous voulez dépanner.

$ docker ps
ID DU CONTENEUR IMAGE COMMANDE CRÉÉE STATUT PORTS NOMS
0ce7cfb9be37 nginx "/docker-entrypoint...." il y a 2 minutes Up 2 minutes 0.0.0.0:80->80/tcp web-server
4ab8551671d7 nginx "/docker-entrypoint...." il y a 6 minutes En haut 6 minutes 80/tcp vigilant_ganguly
$

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

$ docker exec -it 0ce7cfb9be37 bash

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

root@0ce7cfb9be37:/#

Vous pouvez installer le paquetage netstat pour rechercher les connexions réseau établies. Par défaut, ces utilitaires peuvent ne pas être disponibles dans le conteneur.

Pour l’installer, utilisez

apt update
apt install net-tools
Maintenant, nous pouvons utiliser la commande

netstat comme d’habitude.

# netstat -an

Résultat :

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse étrangère État
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
Sockets de domaine UNIX actifs (serveurs et établis)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] STREAM CONNECTED 35748
unix 3 [ ] STREAM CONNECTED 35749
Comme vous pouvez le voir dans la sortie ci-dessus, les connexions établies avec leurs adresses source et destination sont listées. Pour voir les processus à l'écoute sur les ports, vous pouvez utiliser :
# netstat -tulnp

Résultat :

Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale Adresse étrangère État PID/Nom du programme
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 la commande docker ps.

[root@relicflare-shared-services ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5db9a01d4a8 postgres:13.1-alpine "docker-entrypoint.s..." il y a 9 jours Up 9 days 0.0.0.0:5432->5432/tcp relicflare_server_postgres
[root@relicflare-shared-services ~]#

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

docker exec e5db9a01d4a8 netstat |grep ESTABLISHED 

Vous obtiendrez alors le résultat suivant.

[root@relicflare-shared-services ~]# 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 
[root@relicflare-shared-services ~]# 

L’idée est donc d’exécuter la commande netstat en même temps que la commande docker exec.

Conclusion

Maintenant que vous avez les détails de connexion nécessaires, vous pouvez poursuivre votre dépannage en regardant plus loin dans les journaux de docker et de processus.