J'utilise Docker pour Mac. J'exécute un microservice basé sur nodejs dans un conteneur Docker. Je souhaite tester le microservice de nœud via le navigateur. Comment obtenir l'adresse IP du conteneur Docker en cours d'exécution?
J'utilise Docker pour Mac. J'exécute un microservice basé sur nodejs dans un conteneur Docker. Je souhaite tester le microservice de nœud via le navigateur. Comment obtenir l'adresse IP du conteneur Docker en cours d'exécution?
Réponses:
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.1
et votre premier conteneur devrait l'être 172.17.0.2
si 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>
localhost
:)
http://172.17.0.2:anyPort
partir 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.
docker run --name struts --rm -i tomcat
2. Obtenez l'IP de votre conteneur (si vous n'en avez qu'un): docker inspect struts | grep '"IPAddress"' | head -n 1
3. 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.
Utilisez l' --format
option pour obtenir uniquement l'adresse IP à la place des informations complètes sur le conteneur:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
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
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
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
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, -p
vous 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é.