es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.NET Core + Docker – Cómo persistir archivos cargados en wwwroot después de una nueva compilación

Tengo una aplicación desarrollada en .Net Core y uso Docker para desplegarla en un VPS Linux.

En la aplicación, tengo una función que consiste en subir archivos y los guardo en wwwroot. He utilizado volúmenes de Docker para externalizar la carpeta.

Pero cada vez que hago un build, pierdo todos los archivos que los usuarios han subido. Lo cual es normal.

Actualización: Así es como estoy declarando el volumen

app:
image: app
depends_on:
  - "postgres_image"
build:
  context: .
  dockerfile: Dockerfile
ports:
  - "5000:5000"
volumes:
  - app_wwwroot:/wwwroot

Mi pregunta es cuál es el mejor enfoque para poder realizar cambios en la aplicación (compilar el código fuente y obtener una nueva versión) sin perder los archivos subidos.

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una opción para manejar esta situación es utilizar un proceso de dos pasos para implementar la aplicación:

    1. Crear una nueva imagen de Docker con el código fuente actualizado, pero sin reconstruir el volumen. Esto se puede hacer separando la definición del volumen de la definición de la aplicación en el archivo docker-compose, de la siguiente manera:
    volumes:
      app_wwwroot:
    
    services:
      app:
        build:
          context: .
          dockerfile: Dockerfile
        volumes:
          - app_wwwroot:/wwwroot
    
    1. Implementar la nueva imagen con un volumen existente utilizando la opción --volumes-from:
    docker run -d --name new_app --volumes-from old_app app_image
    

    Esto creará un nuevo contenedor new_app con el código fuente actualizado, pero utilizando el mismo volumen del antiguo contenedor old_app. De esta manera, los archivos cargados se conservarán y estarán disponibles en el nuevo contenedor.

    Otra opción es utilizar un servicio de almacenamiento en la nube, como Amazon S3 o Google Cloud Storage, para almacenar los archivos cargados en lugar del sistema de archivos local. De esta manera, los archivos serán accesibles desde cualquier contenedor y no se perderán cuando se implemente un nuevo contenedor. Para implementar esta opción, deberá modificar el código para cargar y recuperar los archivos desde el servicio de almacenamiento en la nube, y configurar el contenedor para acceder al servicio utilizando variables de entorno o archivos de configuración.

Comments are closed.