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>
OscarAkaElvis
la source
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>
Nilesh Patel
la source
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
Nima Ghoroubi
la source
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
Ilya Yevlampiev
la source
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.

gScht
la source
2

Pour mon cas, ci-dessous a travaillé sur Mac :

Je ne pouvais pas accéder aux adresses IP des conteneurs directement sur Mac. J'ai besoin d'utiliserlocalhost avec la redirection de port, par exemple si le port est 8000, alorshttp://localhost:8000

Voir https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

La réponse originale était de: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949

Lavande
la source
-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é.

Akash Sharma
la source