Si utilizamos el tipo de red host en un contenedor, la pila de red de ese contenedor no está aislada del Host Docker (el contenedor comparte el espacio de nombres de red del Host Docker), y el contenedor no tiene asignada su propia dirección IP. Por ejemplo, si ejecutas un contenedor que ofrece su servicio en al puerto 80/tcp y utilizas el modo de red del host, la aplicación del contenedor estará disponible en el puerto 80/tcp de la dirección IP del Host Docker.
- Para optimizar el rendimiento.
- En situaciones en las que un contenedor necesita manejar un gran rango de puertos.
Esto se debe a que no requiere traducción de direcciones de red (DNAT), por lo tanto no usaremos la opción
-p
en la creación del contenedor condocker run
.
El controlador de red host sólo funciona en máquinas Linux, y no es compatible con Docker Desktop para Windows o Mac.
Vamos a crear un contenedor desde la imagen nginx
que nos proporciona un servidor web que espera peticiones en el puerto 80/tcp conectado a la red host:
docker run --rm -d --network host --name my_nginx nginx
Al listar el contenedor, comprobamos que efectivamente no hemos creado ninguna redirección de puertos:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1764a33c096 nginx "/docker-entrypoint.…" About a minute ago Up About a minute my_nginx
Podemos comprobar que no tiene asignada ninguna dirección IP:
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_nginx
Y en el Host Docker podemos comprobar quien está escuchando en el puerto 80/tcp:
$ sudo ss -tulpn | grep :80
Por último, desde un navegador podemos acceder al puerto 80/tcp del Host Docker para comprobar que funciona. Usando curl
podemos hacer la prueba desde el mismo Host Docker:
$ curl http://localhost