Cómo comunicarse con una aplicación que se ejecuta en un contenedor

La red de contenedores de forma predeterminada se realiza mediante un puente Ethernet virtual. Esencialmente, se crea un puente en su host Docker y todos los paquetes asignados a su contenedor se reenvían a él. Cada contenedor recibe una IP privada dentro de su host que no será accesible desde fuera de su host. Solo su anfitrión expondrá su dirección pública. Uno de los puertos host tendrá que asignarse al puerto contenedor deseado.

Por ejemplo, supongamos que está trabajando en una máquina con una IP pública de digamos 22.1.1.1 ahora esta IP puede exponer sobre puertos numerados del 0 al 65536. Ahora, de manera predeterminada, todos los servidores web se abren en el puerto 80. Por lo general, su servidor web se ejecuta en 22.1.1.1:80.

Sin embargo, en el caso de utilizar contenedores Docker en el modo de red predeterminado, su contenedor recibirá una IP privada para sí mismo, por ejemplo, 10.1.1.1, que puede exponer 65k puertos impares. Sin embargo, dado que la IP de su contenedor es privada, no sería accesible fuera de su host. Para acceder a él desde fuera de su host, tendrá que asignar su puerto interno al puerto externo cuando inicie el contenedor con el indicador -P.

En el caso anterior, tendrá que mapear algo como

22.1.1.1:80 -> 10.1.1.1:80

Para la sintaxis exacta, consulte los documentos de Docker. Esto especifica que cualquier solicitud que llegue al puerto 80 del host se enviará al puerto 80 del contenedor. Debe recordarse que solo puede alojar un servidor web contenedor en el puerto 80 del host a la vez. Espero que esto te haya ayudado con las cosas.

Para más información,

https://www.oreilly.com/learning…

De acuerdo, eso depende de cómo se inició su contenedor acoplable.

De manera predeterminada, los contenedores acoplables se ejecutan en modo puente, creará una red para el contenedor con IP privada y se aislará del resto de la red. El otro modo consiste en usar la red host como si fuera un contenedor, asignará todos sus puertos a la máquina host. Aparecerá que el contenedor se está ejecutando en el host como un servicio.

Digamos que inicia un contenedor MySQL, de manera predeterminada, MySQL escucha el puerto 3306, y cuando ejecuta el contenedor puede asignar el puerto del servicio MySQL en el contenedor, 3306, a un puerto en su sistema host como 8000. Con eso podrá acceder al servicio MySQL a través del puerto 8000, pero solo a través de la máquina host que, según el contenedor que desee ejecutar, no es deseable.

Otro enfoque es hacer que el contenedor use la misma interfaz de red que la suya, con eso el servicio MySQL se ejecutará en el contenedor pero asignará sus puertos a su sistema. Con eso quiero decir, el servicio se comunicará con su sistema en el puerto 3306, al igual que si fuera un servidor MySQL que ejecuta su máquina host.

Estos dos enlaces pueden darle alguna explicación, probablemente mejor:

http://www.nuagenetworks.net/blo

Descripción general de las redes de Docker – Nuage Networks

More Interesting

¿Se puede construir un producto viable mínimo basado en web totalmente funcional en Python?

Administración de dispositivos móviles: ¿Hay alguna solución mdm que no sea Citrix que haga virtualización de aplicaciones? Me refiero a cualquier solución mdm que ofrezca virtualización de aplicaciones además de mdm

¿Cuál es una buena aplicación para iPhone para rastrear el tiempo dedicado a varias aplicaciones en dispositivos móviles?

Cómo migrar a AngularJs 1.4

¿Se puede utilizar Django para desarrollar aplicaciones web dinámicas y receptivas y aplicaciones móviles?

¿Cuál es el mejor uso del COO de software / aplicación en la gestión de una organización para cumplir sus objetivos KPI y objetivos generales?

¿Cuáles son las distintas fases en las pruebas beta? ¿Cuáles deberían ser los objetivos y resultados para impulsar un producto al mercado?

¿Cómo alguien con poca o ninguna experiencia en creación de sitios web podría crear un sitio que sea similar a WikiAnswers?

¿Qué hace que una aplicación web sea increíble?

¿Cuáles son los mejores consejos para crear una tienda web afiliada?

¿Por qué no podemos usar un lenguaje de compilación en una aplicación web directamente?

¿Cuál es la comparación de Firebase con Parse y MongoDB?

¿Cómo se puede mejorar Remember The Milk?

¿Qué herramienta en línea puedo usar para descubrir cómo mejorar la usabilidad de mi página de inicio?

¿Cuál es el mejor enfoque para la ramificación de Git cuando un equipo trabaja en una aplicación web?