GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

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

Les conteneurs Docker ne sont pas seulement une question d'isolation, ils sont souvent utilisés pour gérer des 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 pont" par défaut 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 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. Il s'agit du principal cas d'utilisation pour accéder à un conteneur directement via son adresse IP, mais vous devriez probablement toujours lier un port (vous pouvez le garder fermé à Internet dans votre pare-feu).

Cependant, les adresses IP sont éphémères et peuvent facilement se casser 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 accéder les uns aux autres 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

Il y a beaucoup d'avantages à utiliser des ponts, et c'est recommandé par rapport à l'ancien --link option, qui fonctionne sur le réseau par défaut. Le problème principal est que les conteneurs des réseaux définis par l'utilisateur seront exposés aux ports des 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.

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 pour les autres.

Obtenir l'adresse IP de Docker

Si vous voulez juste l'adresse IP, c'est assez simple à obtenir depuis le système d'exploitation hôte. Tout d'abord, vous devrez 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. Nous ne sommes cependant intéressés que par l'adresse IP, vous pouvez donc lui transmettre une option de formatage avec -f pour le réduire à l'adresse uniquement.

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 voulez une solution plus concrète, vous pouvez utiliser docker network inspect qui imprime des informations sur tous les conteneurs du réseau donné, en les formatant éventuellement en tant que 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 régulières telles que ifconfig et obtenir l'adresse IP de cette façon.

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

docker exec -it b94ef3169cd4 ip a


Docker
  1. Comment partager des données entre des conteneurs Docker

  2. Comment répertorier les conteneurs Docker

  3. Comment accéder à l'espace de noms réseau du conteneur Docker à partir de l'hôte

  4. Comment puis-je obtenir des informations sur le conteneur Docker Linux à partir du conteneur lui-même ?

  5. Comment puis-je obtenir mon adresse IP à partir de la ligne de commande ?

Comment se connecter en SSH aux conteneurs Docker [étape par étape]

Comment exécuter des conteneurs Docker

Comment obtenir l'adresse IP du conteneur Docker

Utilisation des conteneurs Docker à partir de la ligne de commande

Comment nommer ou renommer les conteneurs Docker

Comment gérer les conteneurs Docker