Tengo algunos contenedores Docker que se ejecutan como:
- Nginx
- Aplicación web 1
- Aplicación web 2
- PostgreSQL
Dado que Nginx necesita conectarse a los servidores de aplicaciones web dentro de la aplicación web 1 y 2, y las aplicaciones web necesitan hablar con PostgreSQL, tengo enlaces como este:
- Nginx --- enlace ---> Aplicación web 1
- Nginx --- enlace ---> Aplicación web 2
- Aplicación web 1 --- enlace ---> PostgreSQL
- Aplicación web 2 --- enlace ---> PostgreSQL
Esto funciona bastante bien al principio. Sin embargo, cuando desarrollo una nueva versión de la aplicación web 1 y la aplicación web 2, necesito reemplazarlas. Lo que hago es eliminar los contenedores de la aplicación web, configurar nuevos contenedores e iniciarlos.
Para los contenedores de aplicaciones web, sus direcciones IP al principio serían algo como:
- 172.17.0.2
- 172.17.0.3
Y después de que los reemplace, tendrán nuevas direcciones IP:
- 172.17.0.5
- 172.17.0.6
Ahora, esas variables de entorno expuestas en el contenedor Nginx todavía apuntan a las antiguas direcciones IP. Aquí viene el problema. ¿Cómo reemplazo un contenedor sin romper la conexión entre contenedores? El mismo problema también le sucederá a PostgreSQL. Si quiero actualizar la versión de la imagen de PostgreSQL, ciertamente necesito eliminarla y ejecutar la nueva, pero luego necesito reconstruir todo el gráfico del contenedor, por lo que esto no es ideal para el funcionamiento del servidor en la vida real.