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.