Saltar al contenido

Cómo acceder al puerto de host desde el contenedor de la ventana acoplable

Solución:

Para todas las plataformas

Docker v 20.10 y superior (desde el 14 de diciembre de 2020)

En Linux, agregue --add-host=host.docker.internal:host-gateway a su comando de Docker para habilitar esta función. (Consulte a continuación la configuración de Docker Compose).

Utilice su dirección IP interna o conéctese al nombre DNS especial host.docker.internal que se resolverá en la dirección IP interna utilizada por el host.

Para habilitar esto en Docker Compose en Linux, agregue las siguientes líneas a la definición del contenedor:

extra_hosts:
- "host.docker.internal:host-gateway"

Para macOS y Windows

Docker v 18.03 y superior (desde el 21 de marzo de 2018)

Utilice su dirección IP interna o conéctese al nombre DNS especial host.docker.internal que se resolverá en la dirección IP interna utilizada por el host.

Soporte de Linux pendiente https://github.com/docker/for-linux/issues/264

MacOS con versiones anteriores de Docker

Docker para Mac v 17.12 a v 18.02

Igual que el anterior pero use docker.for.mac.host.internal en lugar de.

Docker para Mac v 17.06 a v 17.11

Igual que el anterior pero use docker.for.mac.localhost en lugar de.

Docker para Mac 17.05 y versiones anteriores

Para acceder a la máquina host desde el contenedor de la ventana acoplable, debe adjuntar un alias de IP a su interfaz de red. Puede vincular la IP que desee, solo asegúrese de no usarla para nada más.

sudo ifconfig lo0 alias 123.123.123.123/24

Luego, asegúrese de que su servidor esté escuchando la IP mencionada anteriormente o 0.0.0.0. Si está escuchando en localhost 127.0.0.1 no aceptará la conexión.

Luego, simplemente apunte su contenedor docker a esta IP y podrá acceder a la máquina host.

Para probar, puede ejecutar algo como curl -X GET 123.123.123.123:3000 dentro del contenedor.

El alias se restablecerá en cada reinicio, así que cree un script de inicio si es necesario.

Solución y más documentación aquí: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds

Al ejecutar Docker de forma nativa en Linux, puede acceder a los servicios de host utilizando la dirección IP del docker0 interfaz. Desde el interior del contenedor, esta será su ruta predeterminada.

Por ejemplo, en mi sistema:

$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link 
       valid_lft forever preferred_lft forever

Y dentro de un contenedor:

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  src 172.17.0.4 

Es bastante fácil extraer esta dirección IP usando un simple script de shell:

#!/bin/sh

hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip

Es posible que deba modificar el iptables reglas en su host para permitir conexiones desde contenedores Docker. Algo como esto hará el truco:

# iptables -A INPUT -i docker0 -j ACCEPT

Esto permitiría el acceso a cualquier puerto del host desde los contenedores de Docker. Tenga en cuenta que:

  • Las reglas de iptables están ordenadas, y esta regla puede o no hacer lo correcto dependiendo de qué otras reglas vengan antes.

  • solo podrá acceder a los servicios de host que estén (a) escuchando INADDR_ANY (también conocido como 0.0.0.0) o que están escuchando explícitamente en el docker0 interfaz.


Si está utilizando Docker en MacOS o Windows 18.03+, puede conectarse al nombre de host mágico host.docker.internal.


Por último, en Linux puede ejecutar su contenedor en el espacio de nombres de la red del host configurando --net=host; en este caso localhost en tu anfitrión es lo mismo que localhost dentro del contenedor, por lo que el servicio contenedorizado actuará como servicios no contenedorizados y será accesible sin ninguna configuración adicional.

Usar --net="host" en tus docker run comando, entonces localhost en su contenedor de la ventana acoplable apuntará a su host de la ventana acoplable.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *