Obtener dirección IP en Docker: Ejemplos prácticos

Go to Homepage

Obtener la dirección IP de un contenedor en Docker puede ser un desafío

Cuando empezamos a trabajar con Docker, uno de los primeros problemas que enfrentamos es la obtención de las direcciones IP de los contenedores. Esto puede ser un desafío, especialmente si no tienes experiencia con Docker o con la administración de redes.

En nuestro equipo, nos encontramos con este problema al tratar de configurar la conexión de un contenedor con otros servicios a través de sus direcciones IP. Queríamos conectar el contenedor de la aplicación con un servicio de base de datos, pero no teníamos las direcciones IP de los contenedores.

Afortunadamente, después de investigar, descubrimos algunos métodos para obtener las direcciones IP de los contenedores de Docker.

Métodos para obtener las direcciones IP de los contenedores de Docker

Método 1: Utilizar el comando Docker inspect

Una de las formas más sencillas de obtener la dirección IP de un contenedor es utilizando el comando Docker inspect. Este comando proporciona una gran cantidad de información sobre el contenedor, incluyendo su dirección IP.

Para obtener la dirección IP de un contenedor, simplemente ejecutamos el siguiente comando:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <nombre_del_contenedor>

En este comando, reemplazamos <nombre_del_contenedor> con el nombre del contenedor del que deseamos obtener la dirección IP.

Método 2: Utilizar el comando Docker exec

Otro método para obtener la dirección IP de un contenedor es utilizando el comando Docker exec. Este método es útil si necesitamos obtener la dirección IP de un contenedor en el que ya estamos ejecutando algún comando.

Para obtener la dirección IP de un contenedor utilizando el comando Docker exec, simplemente ejecutamos el siguiente comando:

docker exec <nombre_del_contenedor> hostname -I

En este comando, reemplazamos <nombre_del_contenedor> con el nombre del contenedor del que deseamos obtener la dirección IP.

Obtener la dirección IP de un contenedor en Docker puede ser un desafío, pero existen métodos sencillos para hacerlo. En este artículo, hemos discutido dos métodos: utilizando el comando Docker inspect y el comando Docker exec. Es importante conocer estos métodos para poder resolver rápidamente problemas relacionados con la conexión de los contenedores de Docker.

Utiliza el comando ‘docker inspect’ para obtener la dirección IP del contenedor

Una vez que tenemos nuestro contenedor corriendo, necesitamos obtener su dirección IP para poder acceder a él a través de nuestra red.

Para ello, podemos utilizar el comando docker inspect y filtrar la salida para obtener únicamente la dirección IP asignada al contenedor.

El comando docker inspect nos proporciona un gran cantidad de información sobre nuestro contenedor, incluyendo la dirección IP asignada. Para filtrar la salida y obtener sólo la dirección IP, podemos utilizar la siguiente sintaxis:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <nombre_del_contenedor>

En donde <nombre_del_contenedor> es el nombre o ID del contenedor del que queremos obtener la dirección IP.

Este comando nos devuelve la dirección IP del contenedor, que podemos copiar y utilizar para acceder al servicio que está corriendo en él.

Por ejemplo, si tenemos un contenedor que está corriendo un servidor web en el puerto 80, podemos acceder a él a través de un navegador utilizando la dirección IP que obtuvimos con el comando anterior. En este caso, la dirección IP sería algo como 172.17.0.2:

http://172.17.0.2

El comando docker inspect nos permite obtener la dirección IP asignada a un contenedor para poder acceder a él a través de nuestra red. Utilizando la sintaxis correcta, podemos filtrar la salida para obtener únicamente la información que necesitamos, incluyendo la dirección IP.

Otra opción es utilizar la variable de entorno ‘$HOST_IP’ para obtener la dirección IP

Otra opción muy útil para obtener la dirección IP en Docker es utilizando la variable de entorno $HOST_IP. Esto es útil, por ejemplo, si queremos especificar una dirección IP en una configuración, como en un archivo docker-compose.yml.

Para utilizar esta opción, simplemente debemos definir la variable de entorno en nuestro contenedor Docker. En el ejemplo siguiente, definimos la variable de entorno $HOST_IP con el valor de la dirección IP del equipo host:

docker run -e HOST_IP=`hostname -i` mi-contenedor

En este ejemplo, la opción -e especifica que estamos definiendo una variable de entorno, y hostname -i es un comando que obtiene la dirección IP del equipo host. La dirección IP se guarda en la variable de entorno $HOST_IP y se pasa al contenedor.

Luego, en nuestro archivo docker-compose.yml, podemos utilizar la variable de entorno $HOST_IP en lugar de la dirección IP estática:

version: "3.7"
services:
    mi-servicio:
        image: mi-imagen
        environment:
            HOST_IP: $HOST_IP

En este ejemplo, la dirección IP definida en la variable de entorno se pasa al servicio mi-servicio utilizando la clave environment. Estos cambios en la configuración permiten que el contenedor tenga una dirección IP dinámica en lugar de una dirección IP fija.

Utilizar la variable de entorno $HOST_IP para obtener la dirección IP en Docker puede ser muy útil para evitar problemas en ambientes dinámicos y permite configurar contenedores con mayor flexibilidad.

Usa la bandera ‘-p’ seguida del puerto para vincular la dirección IP del host con la del contenedor

Cuando estamos trabajando con contenedores en Docker, puede que necesitemos que el contenedor tenga acceso a alguna dirección IP en específico que se encuentre en nuestro host. Para conseguir esto, usamos la bandera ‘-p’ seguida del puerto que queremos exponer.

Por ejemplo, si queremos exponer el puerto 8080 de nuestro host al contenedor, usamos el siguiente comando:

docker run -p 8080:8080 mi-imagen

Este comando vinculará el puerto 8080 de nuestro host con el puerto 8080 del contenedor, permitiéndonos acceder a la dirección IP del host desde dentro del contenedor.

Ahora bien, es importante tener en cuenta que la dirección IP del host puede cambiar dependiendo del entorno en el que estamos trabajando. Por ejemplo, si estamos trabajando en una máquina virtual, la dirección IP del host puede ser diferente a la que tenemos en nuestra máquina local.

Para obtener la dirección IP del host dentro del contenedor, podemos usar el siguiente comando:

ip route show default | awk '/default/ {print $3}'

Este comando nos dará la dirección IP del host, la cual podemos usar para acceder a cualquier servicio expuesto en el host.

Vincular la dirección IP del host con la del contenedor es importante cuando queremos que el contenedor tenga acceso a algún servicio que se encuentre en el host. Para conseguir esto, usamos la bandera ‘-p’ seguida del puerto que queremos exponer. Además, es importante tener en cuenta que la dirección IP del host puede variar dependiendo del entorno en el que estemos trabajando.

Recuerda que la dirección IP de un contenedor puede cambiar cada vez que se inicie

Es importante tener en cuenta que la dirección IP de un contenedor en Docker no es fija y puede cambiar cada vez que se inicie. Esto es debido a que Docker asigna una dirección IP aleatoria dentro de la red del host cada vez que se inicia un contenedor.

Es por eso que es necesario conocer la dirección IP de un contenedor en cada momento. Para obtener la dirección IP de un contenedor, podemos utilizar el siguiente comando:

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

Este comando nos dará la dirección IP del contenedor deseado. Sin embargo, como mencionamos antes, esta dirección puede cambiar cada vez que el contenedor se inicie. Para evitar esto, podemos utilizar un nombre de host en lugar de una dirección IP.

Para ello, podemos crear una red de Docker, a la cual podremos conectar nuestros contenedores. De esta forma, podemos asignar un nombre de host a cada contenedor y utilizarlo en lugar de su dirección IP.

Por ejemplo, podemos crear una red con el siguiente comando:

docker network create nombre_de_la_red

Y luego conectar nuestros contenedores a esta red y asignarles un nombre de host:

docker run --name nombre_del_contenedor --network nombre_de_la_red imagen_del_contenedor

De esta manera, podemos referirnos a este contenedor con su nombre de host dentro de la red, y no tendremos que preocuparnos por su dirección IP cambiante.

Recuerda que, para obtener una dirección IP persistente, es recomendable utilizar un nombre de host en lugar de una dirección IP. Y para ello, podemos crear una red de Docker y asignar nombres de host a nuestros contenedores.

Otros Artículos