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


Réponses:


115

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 accessible uniquement depuis votre hôte. Vous pouvez vérifier les données de votre réseau de conteneurs en:

docker inspect <containerNameOrId>

Il est probablement préférable de filtrer:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

Habituellement, la plage d'adresses IP du docker par défaut est 172.17.0.0/16. Votre hôte devrait être 172.17.0.1et votre premier conteneur devrait l'être 172.17.0.2si tout est normal et que vous n'avez spécifié aucune option réseau spéciale.

EDIT Une autre façon plus élégante d'utiliser les fonctionnalités du docker au lieu de "bash tricking":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>

7
Vous parlez de l'adresse IP interne, et cela n'a rien à voir avec la question à l'étude. Votre réponse n'est que confusion pour le lecteur. Étant donné que l'adresse IP est l'adresse IP de la machine sur laquelle le Docker est exécuté. Ce qui est juste localhost:)
David Gatti

Vous avez tort. L'OP n'a rien spécifié sur le microservice doit être accessible de l'extérieur. Il a seulement dit "tester le microservice du nœud via le navigateur" et cela peut être fait avec ma méthode proposée en utilisant à http://172.17.0.2:anyPortpartir de l'hôte. Bien sûr, si vous souhaitez y accéder en utilisant localhost sur l'hôte, vous devez mapper les ports. Va voir ce que veut l'OP.
OscarAkaElvis

3
Vous dites que vous pouvez accéder à l'adresse IP interne à l'intérieur du conteneur à partir de 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 candidats au docker si je scanne ma machine hôte avec un scanner réseau, et ce n'est pas le cas encore. Je sais que ça ne devrait pas marcher, j'ai testé ce que tu dis (on ne sait jamais) et ça ne marche pas. Alors peut-être que votre explication manque un élément clé?
David Gatti

Les conteneurs sont accessibles depuis l'hôte. Essayez-le vous-même ... Je vais vous donner quelques indices. 1. Téléchargez un conteneur d'exécution: docker run --name struts --rm -i tomcat2. Obtenez l'IP de votre conteneur (si vous n'en avez qu'un): docker inspect struts | grep '"IPAddress"' | head -n 13. Ouvrez-le sur le navigateur de l'hôte http://x.x.x.x:8080. Vous pouvez voir la page par défaut d'Apache Tomcat.
OscarAkaElvis

1
Je n'ai pas pu accéder à l'application Web dans le conteneur sans mapper le port en utilisant -p
bilal.haider

22

Utilisez l' --formatoption pour obtenir uniquement l'adresse IP à la place des informations complètes sur le conteneur:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
Dans l'hôte Windows, utilisez des guillemets doubles au lieu de guillemets simples. Par exemple, sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Référence: lien
Vineet Sajwan

1
nouveau format d'informations sur le conteneur ici
Igor

18

Pour les moteurs docker modernes, utilisez cette commande:

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

et pour les moteurs plus anciens, utilisez:

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

Comme mentionné et lié dans le commentaire de @sanyash dans la zone OP d'origine.
Jesse Chisholm le

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

11

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

5

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

Avec docker port <container id>vous pouvez voir le port choisi au hasard. L'accès est alors possible via localhost:port.



-2

Vous ne pouvez pas accéder à l'adresse IP du docker depuis l'extérieur de cette machine hôte. Si votre navigateur est sur une autre machine, mieux vaut mapper le port hôte au port du conteneur en passant-p 8080:8080 commande run.

En passant, -pvous pouvez mapper le port hôte sur le port conteneur et un proxy est configuré pour transférer tout le trafic pour ledit port hôte vers le port conteneur désigné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.