GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo obtener la dirección IP de un contenedor Docker desde el host

Los contenedores Docker no se tratan solo de aislamiento, a menudo se usan para administrar procesos que aún necesitan comunicarse entre sí directamente. Pero, para comunicarse, a menudo necesitará saber la dirección IP de cada contenedor, que puede encontrar con unos pocos comandos.

Considere usar un puente definido por el usuario

La red Docker es un poco complicada. Los contenedores lanzados de forma predeterminada se colocarán en la "red de puente" predeterminada y se les permitirá comunicarse directamente con otros contenedores, siempre que tenga su dirección IP privada. Esto se puede desactivar para un verdadero aislamiento, pero no lo está de forma predeterminada.

También puede usar esta dirección para comunicarse desde el sistema operativo host si no desea vincular un puerto. Este es el caso de uso principal para acceder a un contenedor directamente a través de su dirección IP, pero probablemente debería vincular un puerto (puede mantenerlo cerrado desde Internet en su firewall).

Sin embargo, las direcciones IP son efímeras y pueden romperse fácilmente cuando los contenedores se detienen y se inician. Para la comunicación entre contenedores, Docker proporciona una solución a través de redes puente definidas por el usuario, que probablemente debería usar si tiene varios contenedores que se comunican entre sí.

Los contenedores agregados a redes no predeterminadas podrán acceder entre sí a través de su alias, que se resolverá automáticamente en la IP privada. Puede crear nuevas redes, ejecutar contenedores en esas redes y conectar contenedores existentes a la red. Luego puede acceder a los otros contenedores utilizando el alias como nombre de host; por ejemplo, el contenedor NGINX aquí puede acceder a la instancia de MongoDB con la cadena de conexión mongodb://mongohost:27017 .

docker network create example
docker run --net example --name nginx -d nginx
docker network connect example --alias mongohost mongodb

El uso de puentes tiene muchas ventajas y se recomienda sobre el --link heredado. opción, que funciona en la red predeterminada. El problema principal es que los contenedores en las redes definidas por el usuario estarán expuestos a los puertos de los demás, independientemente de si están publicados, pero puede configurar varias redes, por lo que esto no suele ser un problema.

La otra desventaja es que debido a que las redes definidas por el usuario brindan un mejor aislamiento, tampoco le permiten acceder a los contenedores a través de las redes con su dirección IP privada. Todos los contenedores en la red predeterminada pueden comunicarse entre sí, pero una vez que se eliminan y se colocan en una red definida por el usuario, esa capacidad se desactiva. Sin embargo, también puede lanzar el contenedor tanto en la red predeterminada como en la definida por el usuario, por lo que no hay problema si elige hacer que el contenedor sea visible para los demás.

Obtención de la dirección IP desde Docker

Sin embargo, si solo desea la dirección IP, es bastante simple obtenerla del sistema operativo host. Primero, deberá encontrar la ID o el nombre del contenedor para el que desea obtener la información, lo que puede hacer con:

docker ps

Luego, ejecuta docker inspect , que devuelve un enorme archivo JSON con toda la información sobre el contenedor. Sin embargo, solo nos interesa la dirección IP, por lo que puede pasarle una opción de formato con -f para limitarlo a solo la dirección.

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

Este comando funciona bien, pero también solo devuelve información para un contenedor del que necesitará la ID. Si desea una solución más concreta, puede usar docker network inspect que imprime información sobre todos los contenedores en la red dada, formateando opcionalmente como una tabla de búsqueda JSON:

docker network inspect bridge -f '{{json .Containers}}'

Obtención de la configuración de red desde el contenedor

Los contenedores Docker son realmente solo un mecanismo de aislamiento, y nada le impide ingresar al contenedor y ejecutar comandos regulares de Linux como ifconfig y obtener la dirección IP de esa manera.

Para hacer eso, deberá obtener el nombre o ID del contenedor con docker ps , luego ejecuta exec -it , en este caso, imprimiendo toda la información IP:

docker exec -it b94ef3169cd4 ip a


Docker
  1. Cómo compartir datos entre contenedores Docker

  2. Cómo obtener información sobre un contenedor en Docker

  3. Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

  4. ¿Cómo puedo obtener información del contenedor de Docker Linux desde el propio contenedor?

  5. ¿Cómo obtengo mi dirección IP desde la línea de comandos?

Cómo usar SSH en contenedores Docker [paso a paso]

Cómo ejecutar contenedores Docker

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

Trabajar con Docker Containers desde la línea de comandos

Cómo nombrar o renombrar contenedores Docker

Cómo gestionar contenedores Docker