129 votes

Comment obtenir l'adresse IP du conteneur Docker en cours d'exécution

Je suis en train d'utiliser Docker pour Mac. Je fais tourner un microservice basé sur nodejs dans un conteneur Docker. Je veux tester le microservice node à travers le navigateur. Comment obtenir l'adresse IP du conteneur Docker en cours d'exécution?

3 votes

Est-ce que cela répond à votre question? Comment obtenir l'adresse IP d'un conteneur Docker depuis l'hôte?

157voto

OscarAkaElvis Points 2168

Si vous ne souhaitez pas mapper les ports de votre hôte vers le conteneur, vous pouvez accéder directement à l'adresse IP de la plage docker pour le conteneur. Cette plage est par défaut uniquement accessible depuis votre hôte. Vous pouvez vérifier les données réseau de votre conteneur en faisant :

docker inspect 

Il est probablement préférable de filtrer :

docker inspect  | grep '"IPAddress"' | head -n 1

En général, la plage d'adresses IP docker par défaut est 172.17.0.0/16. Votre hôte devrait être 172.17.0.1 et votre premier conteneur devrait être 172.17.0.2 si tout est normal et que vous n'avez pas spécifié d'options réseau spéciales.

MODIFIER Une autre façon plus élégante d'utiliser les fonctionnalités de docker au lieu de "tricher en bash" :

docker inspect -f "{{ .NetworkSettings.IPAddress }}" 

MODIFIER2 Pour les moteurs docker modernes, désormais c'est de cette manière (merci aux commentateurs !) :

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

9 votes

Vous parlez de l'IP interne, et cela n'a rien à voir avec la question en cours. Votre réponse apporte juste de la confusion au lecteur. Puisque l'IP est l'IP de la machine sur laquelle Docker est en cours d'exécution. Qui est simplement localhost :)

0 votes

Tu as tort. L'OP n'a pas spécifié que le microservice devrait être accessible de l'extérieur. Il a seulement dit "tester le microservice node à travers le navigateur" et cela peut être fait avec ma méthode proposée en utilisant http://172.17.0.2:anyPort depuis l'hôte. Bien sûr, si tu veux y accéder en utilisant localhost sur l'hôte, tu dois mapper les ports. Nous verrons ce que l'OP veut.

4 votes

Vous dites que vous pouvez accéder à l'IP interne à l'intérieur du conteneur depuis l'hôte? C'est physiquement impossible, c'est un réseau complètement différent. Non seulement je viens de vérifier et oui, je ne peux pas accéder au 172.17.0.7 de mon conteneur Docker, alors je devrais pouvoir voir tous les conteneurs Docker si je scanne ma machine hôte avec un scanner de réseau, et ce n'est pas encore le cas. Je sais que cela ne devrait pas fonctionner, j'ai testé ce que vous dites (on ne sait jamais) et cela ne fonctionne pas. Alors peut-être que votre explication manque une partie clé?

28voto

Nilesh Patel Points 125

Utilisez l'option --format pour obtenir uniquement l'adresse IP au lieu de toutes les informations du conteneur :

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'

4 votes

Dans un hôte Windows, utilisez des guillemets doubles au lieu d'apostrophes simples. Par exemple : sudo docker inspect --format "{{ .NetworkSettings.IPAddress }}" Référence : link

1 votes

Nouveau format d'informations sur le conteneur ici

24voto

Nima Ghoroubi Points 21

Pour les moteurs Docker modernes, utilisez cette commande :

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

et pour les anciens moteurs, utilisez :

docker inspect --format '{{ .NetworkSettings.IPAddress }}' nom_du_conteneur_ou_id

0 votes

Comme mentionné et lié dans le commentaire de @sanyash ci-dessus dans la zone d'origine OP.

0 votes

Erreur d'analyse de modèle : template: :1: action non fermée inattendue dans la commande

10voto

Ilya Yevlampiev Points 1001

Si vous souhaitez l'obtenir directement dans le conteneur, vous pouvez essayer

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17

6voto

gScht Points 41

Vous pouvez démarrer votre conteneur avec le drapeau -P. Cela "assigne" un port aléatoire au port exposé de votre image.

Avec docker port , vous pouvez voir le port choisi aléatoirement. L'accès est alors possible via localhost:port.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X