Obtenga la dirección IP del host Docker desde dentro de un contenedor Docker

David Mbochi Njonge 20 junio 2023
  1. Crear un nuevo proyecto
  2. Definir una imagen
  3. Construir una imagen Nginx
  4. ejecutar un contenedor
  5. Obtenga la dirección IP del host Docker desde dentro de un contenedor Docker
  6. Conclusión
Obtenga la dirección IP del host Docker desde dentro de un contenedor Docker

Dirección IP significa dirección de Protocolo de Internet, un valor numérico con la sintaxis 192.168.0.1. Las direcciones IP identifican un dispositivo conectado a una red de forma única y también nos ayudan a acceder a las aplicaciones que se ejecutan en diferentes dispositivos en Internet.

Las aplicaciones pueden ejecutarse en dos entornos: localhost o en un servidor remoto como AWS. Estas aplicaciones utilizan la dirección IP del host para acceder a las aplicaciones o contenedores que se ejecutan en ellas.

Dado que generalmente desarrollamos y ejecutamos aplicaciones en el host local, este tutorial no cubrirá las aplicaciones que se ejecutan en producción. En este tutorial, entenderemos cómo obtener la dirección IP del host Docker desde dentro de un contenedor Docker.

Crear un nuevo proyecto

Abra WebStorm IDEA y seleccione Archivo > Nuevo > Proyecto. En la ventana que se abre, seleccione Proyecto vacío y cambie el nombre del proyecto de sin título a docker-host-ip o use el nombre que prefiera.

Finalmente, presione el botón Crear para generar un proyecto vacío.

Para probar esta aplicación, usaremos un Nginx que muestra una página web que contiene el texto generado aleatoriamente. Cree un archivo index.html y copie y pegue el siguiente código en el archivo.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Lorem ipsum text</title>
</head>
<body>
<p>Magna elaboraret dictumst sed quidam potenti tempus
    principes morbi. Sit libero et eruditi lectus nonumes simul.
    Dicam putent diam volumus similique ponderum sententiae maecenas mattis ridens.
    Homero iisque regione voluptatibus nullam detraxit nullam eleifend brute.
    Ligula orci dicat ac luptatum quisque appareat invidunt odio mazim.
    Reformidans impetus facilis veniam fringilla.
    Consectetur eros ferri congue latine constituto veritus persequeris dolorum felis.
    Harum felis theophrastus aliquam wisi nibh nec assueverit mi nonumes.
    Cubilia option ei ex vulputate at habeo aliquet omittantur delectus.
    Sanctus dolorem moderatius venenatis agam suscipit comprehensam imperdiet amet.</p>
</body>
</html>

Para generar este texto, instale el complemento Lorem y presione Código> Generar> Generar texto en su entorno de desarrollo para generar un texto que contenga 10 oraciones.

Definir una imagen

Cree un archivo llamado Dockerfile y copie y pegue las siguientes instrucciones en el archivo.

FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
  1. FROM: define la imagen base sobre la que crear nuestra imagen personalizada siguiendo las instrucciones posteriores.
  2. COPIAR: copia todos los archivos y directorios del directorio actual en el destino del sistema de archivos de imágenes /usr/share/nginx/html.

Para obtener más información sobre el uso de la imagen de Nginx, el centro de Docker imagen oficial de Nginx proporciona información detallada sobre cómo crear una imagen y ejecutar un contenedor a partir de ella.

Construir una imagen Nginx

Para construir una imagen Nginx de nuestra aplicación, use el siguiente comando para crear una imagen con la etiqueta host-ip:latest.

~/WebstormProjects/docker-host-ip$ docker build --tag host-ip:latest .

Este comando ejecuta secuencialmente las instrucciones del Dockerfile. El proceso se puede ver desde la ventana de la terminal, como se muestra a continuación.

=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23  0.0s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c374086  0.2s
=> [2/2] COPY . /usr/share/nginx/html

ejecutar un contenedor

En esta sección, queremos ver la dirección IP del host desde el contenedor en ejecución. Como no tenemos un contenedor en ejecución, primero debemos ejecutar un contenedor con el siguiente comando.

~/WebstormProjects/docker-host-ip$ docker run --name host-ip-service -d -p 8000:80 host-ip:latest

Este comando ejecuta un contenedor llamado host-ip-service que expone el puerto 8000 en el host para escuchar en la publicación 80 en el contenedor. Para ver el contenido de la aplicación, envíe una solicitud a localhost:8000 (http://localhost:8000/) en el navegador y se mostrará una página web que contiene texto aleatorio.

Obtenga la dirección IP del host Docker desde dentro de un contenedor Docker

Dado que queremos ejecutar un comando en un contenedor en ejecución, use el siguiente comando para ingresar al contenedor Docker.

docker exec -it host-ip-service /bin/sh

Producción :

/ #

Para obtener la dirección IP del host docker en el que se ejecuta nuestro contenedor host-ip-service, escriba el siguiente comando y presione el botón Enter en su teclado.

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

Producción :

172.17.0.1

Tenga en cuenta que dado que estamos utilizando el puente Docker, que es el predeterminado para los contenedores, obtendremos la dirección IP del puente, que es 172.17.0.1, en lugar de la dirección IP en su red donde está conectado el host.

Conclusión

En este tutorial, aprendimos a obtener la dirección IP del host de Docker desde el interior de un contenedor aprovechando una aplicación Nginx. Tenga en cuenta que existen otros métodos para lograr el mismo objetivo dependiendo de dónde se ejecute el contenedor, y deberíamos ser libres de usar cualquier enfoque que cumpla con los requisitos.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Artículo relacionado - Docker Container