Cómo obtener la dirección IP del contenedor Docker en ejecución

Respuestas:

115

Si no desea asignar puertos desde su host al contenedor, puede acceder directamente a la ip del rango de docker para el contenedor. De forma predeterminada, solo se accede a este rango desde su host. Puede verificar los datos de su red de contenedores haciendo:

docker inspect <containerNameOrId>

Probablemente sea mejor filtrar:

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

Por lo general, el rango de IP predeterminado de la ventana acoplable es 172.17.0.0/16. Su host debería ser 172.17.0.1y su primer contenedor debería serlo 172.17.0.2si todo es normal y no especificó ninguna opción de red especial.

EDITAR Otra forma más elegante de usar las funciones de Docker en lugar de "bash tricking":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
OscarAkaElvis
fuente
7
Estás hablando de la IP interna y no tiene nada que ver con la cuestión que nos ocupa. Su respuesta proporciona confusión al lector. Dado que la IP es la IP de la máquina en la que se ejecuta Docker. Que es solo localhost:)
David Gatti
Está usted equivocado. El OP no especificó nada sobre el microservicio debe ser accesible desde el exterior. Solo dijo "microservicio de nodo de prueba a través del navegador" y esto se puede hacer con mi método propuesto usando http://172.17.0.2:anyPortdesde el host. Por supuesto, si desea acceder a él utilizando localhost en el host, debe asignar puertos. Verá lo que quiere el OP.
OscarAkaElvis
3
¿Está diciendo que puede acceder a la IP interna dentro del contenedor desde el host? Eso es físicamente imposible, esa es una red completamente diferente. No solo acabo de verificar y sí, no puedo acceder al 172.17.0.7 de mi contenedor de la ventana acoplable, entonces debería poder ver todo el contendiente de la ventana acoplable si escaneo mi máquina host con un escáner de red, y este no es el caso de nuevo. Sé que no debería funcionar, probé lo que dices (nunca se sabe) y no funciona. Entonces, ¿quizás a tu explicación le falta una parte clave?
David Gatti
Los contenedores son accesibles desde el host. Pruébelo usted mismo ... le daré algunas pistas. 1. Descargue un contenedor de ejecución: docker run --name struts --rm -i tomcat2. Obtenga la ip de su contenedor (si solo tiene uno): docker inspect struts | grep '"IPAddress"' | head -n 13. Ábralo en el navegador del host http://x.x.x.x:8080. Puede ver la página predeterminada de Apache Tomcat.
OscarAkaElvis
1
No pude acceder a la aplicación web en el contenedor sin mapear el puerto usando -p
bilal.haider
22

Use la --formatopción para obtener solo la dirección IP en lugar de la información completa del contenedor:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Nilesh Patel
fuente
4
En el host de Windows, utilice comillas dobles en lugar de comillas simples. Por ejemplo, sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <ID DE CONTENEDOR o NOMBRE> Referencia: enlace
Vineet Sajwan
1
nuevo formato de información sobre el contenedor aquí
Igor
18

Para los motores docker modernos, use este comando:

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

y para motores más antiguos use:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Nima Ghoroubi
fuente
Como se mencionó y se vinculó en el comentario de @sanyash en el área OP original.
Jesse Chisholm
Error de análisis de la plantilla: plantilla:: 1: acción no
cerrada
11

si desea obtenerlo directamente dentro del contenedor, puede intentar

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

Puede iniciar su contenedor con la bandera -P. Esto "asigna" un puerto aleatorio al puerto expuesto de su imagen.

Con docker port <container id>puede ver el puerto elegido al azar. El acceso entonces es posible a través de localhost:port.

gScht
fuente
-2

No puede acceder a la IP de la ventana acoplable desde fuera de esa máquina host. Si su navegador está en otra máquina, es mejor asignar el puerto del host al puerto del contenedor pasando -p 8080:8080al comando ejecutar.

Pasando -p, puede asignar el puerto del host al puerto del contenedor y se configura un proxy para reenviar todo el tráfico de dicho puerto del host al puerto del contenedor designado.

Akash Sharma
fuente