Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

0
162

Les conteneurs Docker ne se limitent pas à l'isolement—ils sont souvent utilisés pour gérer processus qui doivent encore communiquer directement entre eux. Mais, pour communiquer, vous aurez souvent besoin de connaître l'adresse IP de chaque conteneur, que vous pouvez trouver avec quelques commandes.

Envisagez d'utiliser un pont défini par l'utilisateur

La mise en réseau Docker est un peu compliquée. Les conteneurs lancés par défaut seront placés dans le “réseau de pont,” et sont autorisés à communiquer directement avec d'autres conteneurs, à condition que vous disposiez de leur adresse IP privée. Cela peut être désactivé pour une véritable isolation, mais ce n'est pas le cas par défaut.

Vous pouvez également utiliser cette adresse pour communiquer depuis le système d'exploitation hôte si vous ne souhaitez pas lier un port . C'est le cas d'utilisation principal pour accéder à un conteneur directement via son adresse IP, mais vous devriez probablement toujours simplement lier un port (vous pouvez le garder fermé d'Internet dans votre pare-feu).

Cependant, les adresses IP sont éphémères et peuvent se casser facilement lorsque les conteneurs sont arrêtés et démarrés. Pour la communication entre les conteneurs, Docker fournit une solution via des réseaux de pont définis par l'utilisateur, que vous devriez probablement utiliser si plusieurs conteneurs communiquent entre eux.

Les conteneurs ajoutés à des réseaux autres que ceux par défaut pourront se connecter via leur alias, qui se résoudra automatiquement à l'adresse IP privée. Vous pouvez créer de nouveaux réseaux, exécuter des conteneurs dans ces réseaux et connecter des conteneurs existants au réseau. Vous pouvez ensuite accéder aux autres conteneurs en utilisant l'alias comme nom d'hôte ; par exemple, le conteneur NGINX ici peut accéder à l'instance MongoDB avec la chaîne de connexion mongodb://mongohost:27017.

docker network create example docker run –net example –name nginx -d nginx docker network connect example – -alias mongohost mongodb Publicité

Il y a beaucoup d'avantages à utiliser des ponts, et c'est recommandé par rapport à l'ancienne option –link, qui fonctionne sur le réseau par défaut. Le principal problème est que les conteneurs dans les réseaux définis par l'utilisateur seront exposés les uns aux autres, qu'ils soient publiés ou non, mais vous pouvez configurer plusieurs réseaux, ce n'est donc généralement pas un problème. problème.

L'autre inconvénient est que, comme les réseaux définis par l'utilisateur offrent une meilleure isolation, ils vous interdisent également d'accéder aux conteneurs sur les réseaux avec leur adresse IP privée. Tous les conteneurs du réseau par défaut peuvent communiquer entre eux, mais une fois qu'ils sont supprimés et placés dans un réseau défini par l'utilisateur, cette capacité est désactivée. Cependant, vous pouvez également simplement lancer le conteneur dans les réseaux par défaut et définis par l'utilisateur, donc ce n'est pas un problème si vous choisissez de rendre le conteneur visible aux autres.

Obtenir l'adresse IP de Docker

Si vous voulez juste l'adresse IP, c'est assez simple à obtenir à partir du système d'exploitation hôte. Tout d'abord, vous devez trouver l'ID ou le nom du conteneur pour lequel vous souhaitez obtenir les informations, ce que vous pouvez faire avec :

docker ps

Ensuite, exécutez docker inspect, qui renvoie un énorme fichier JSON avec toutes les informations sur le conteneur. Cependant, nous ne sommes intéressés que par l'adresse IP, vous pouvez donc lui transmettre une option de formatage avec -f pour la réduire à l'adresse.

docker inspect -f '{{range.NetworkSettings.Networks} }{{.IPAddress}}{{end}}' name_or_id

Cette commande fonctionne bien, mais elle ne renvoie également que des informations pour un conteneur dont vous aurez besoin de l'ID. Si vous souhaitez une solution plus concrète, vous pouvez utiliser docker network inspect qui imprime des informations sur tous les conteneurs du réseau donné, éventuellement sous forme de table de recherche JSON :

docker network inspect bridge -f '{{json .Containers} }'

Obtenir la configuration réseau à partir du conteneur

Les conteneurs Docker ne sont en réalité qu'un mécanisme d'isolation, et rien ne vous empêche d'entrer simplement dans le conteneur et d'exécuter des commandes Linux normales comme ifconfig et d'obtenir ainsi l'adresse IP.

Publicité

Pour ce faire, vous devrez saisir le nom ou l'ID du conteneur avec docker ps, puis exécuter exec -it, dans ce cas, imprimer toutes les informations IP :

docker exec -it b94ef3169cd4 ip a