Closed jse07 closed 3 years ago
Hay casos en los que un contenedor Docker puede requerir acceso a servicios para el host.
Hay dos opciones para lograr esto:
#get the IP of the host computer from within Docker container /sbin/ip route|awk '/default/ { print $3 }' Se puede acceder a cualquier servicio en el host a través de esta dirección IP, pero otros contenedores Docker tendrán una dirección IP o DNS diferente en la red Docker.
docker run
La primera opcion obliga a enrutar todas las comunicaciones entre contenedores.
Por tanto, todos los contenedores deben ser ejecutados compartiendo la red del host.
Tal vez se puedan usar con bridge, ya que los imports especificarán los puertos que van a usar. Pero, a no ser que iniciemos los imports antes del contenedor principal (la idea es que no haga falta), no podremos realizar toda la asignacion de puertos al iniciar el contenedor, se deben de asignar al momento en que se solicite al gateway... Concreatamente en Docker, no nos permite asignar puertos en caliente, la única opcion seria parar el contenedor, lo cual afectaría demasiado al rendimiento.
En los imports se especifica el puerto en el que se solicitará la petición, (o lista de puertos si se van a usar varias instancias simultáneas). En caso de que se pase el puerto por parámetro ( así el nodo lo tendría más facilidad para aplicar la red host) se pondría una referencia a la variable en el build del contenedor.
No se pueden crear dobles enlaces entre contenedores, hacer docker run -p 8080:8080 alpine1, y despues docker run -p 8080:8080 alpine2, ya que el puerto 8080 del host ya no esta disponible. https://docs.docker.com/network/network-tutorial-standalone/
Por lo tanto, la comunicacion entre contenedores debe efectuarse como trabajaba gateway al principio, devolviendo la ip a la que el contenedor debe conectarse. De esta forma no haría falta usar enlaces entre host y contenedor, ni siquiera para la API, y el contenedor solo debería de tener que especificar el puerto de su API.
Ahora, que pasa si el gateway retorna la ip de un contenedor que no esta en la subred donde se encuentra el contenedor que solicita la peticion??
Docker Desktop Windows ejecuta Docker Engine en un WSL2 backend, por lo que no nos podemos conectar directamente a las ip de los contenedores con un host Windows.
Todos los demonios deben escuchar en 0.0.0.0, para evitar problemas. Aun asi, ¿Como un contenedor emite una peticion a una direccion del localhost?¿Y si no es local host?