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.

La aplicación en el contenedor Docker no guarda el archivo en el volumen de Docker.

Estoy utilizando Docker Desktop para desarrollar mi aplicación. He creado un volumen de Docker llamado “uploadedfiles” y estoy tratando de guardar archivos en él desde mi aplicación de Docker.
Cuando guardo un archivo desde mi aplicación de Docker, veo que se guarda en la carpeta “uploadedfiles” de mi contenedor de Docker. Por lo tanto, asumo que no estoy vinculando mi contenedor de aplicación al volumen creado en mi Dockerfile. ¿Es correcta mi suposición?

¿Cómo puedo vincular mi contenedor de aplicación al volumen creado en mi Dockerfile?

Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base

WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY "InstaTranscribeServerSide/InstaTranscribeServerSide.csproj" "InstaTranscribeServerSide/"
COPY "Services/Services.csproj" "Services/"
COPY "DataAccess/DataAccess.csproj" "DataAccess/"
RUN dotnet restore "InstaTranscribeServerSide/InstaTranscribeServerSide.csproj"
COPY . .
WORKDIR "/src/InstaTranscribeServerSide"
RUN dotnet build "InstaTranscribeServerSide.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "InstaTranscribeServerSide.csproj" -c Release -o /app/publish

FROM base AS final
VOLUME CREATE uploadedfiles
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InstaTranscribeServerSide.dll"]

El volumen de Docker no muestra los archivos cargados.

Docker Volume does not show uploaded files

El contenedor muestra que el volumen no estaba “vinculado”.

Container shows that the volume was not "bound"

El contenedor muestra que el archivo se cargó en la carpeta “uploadedfiles” en el contenedor:

Container shows file was uploaded to "uploadedfiles" folder on container

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, tu suposición es correcta. Necesitas vincular tu contenedor de aplicación al volumen creado en tu Dockerfile para guardar archivos de tu aplicación de Docker en el volumen “uploadedfiles” de Docker.

    Para vincular tu contenedor de aplicación al volumen creado en tu Dockerfile, puedes agregar la siguiente línea a tu Dockerfile:

    RUN mkdir /app/uploadedfiles && ln -s /app/uploadedfiles /uploadedfiles

    Esta línea crea un directorio llamado “uploadedfiles” en el directorio “/app” y luego crea un enlace simbólico desde el directorio “/uploadedfiles” al directorio “/app/uploadedfiles”. Esto asegura que cualquier archivo guardado en el directorio “/uploadedfiles” se guarde en el volumen “uploadedfiles” de Docker.

    Tu Dockerfile actualizado se verá así:

    “`FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base

    WORKDIR /app
    EXPOSE 80
    EXPOSE 443

    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
    WORKDIR /src
    COPY [“InstaTranscribeServerSide/InstaTranscribeServerSide.csproj”, “InstaTranscribeServerSide/”]
    COPY [“Services/Services.csproj”, “Services/”]
    COPY [“DataAccess/DataAccess.csproj”, “DataAccess/”]
    RUN dotnet restore “InstaTranscribeServerSide/InstaTranscribeServerSide.csproj”
    COPY . .
    WORKDIR “/src/InstaTranscribeServerSide”
    RUN dotnet build “InstaTranscribeServerSide.csproj” -c Release -o /app/build

    FROM build AS publish
    RUN dotnet publish “InstaTranscribeServerSide.csproj” -c Release -o /app/publish

    FROM base AS final
    RUN mkdir /app/uploadedfiles && ln -s /app/uploadedfiles /uploadedfiles
    WORKDIR /app
    COPY –from=publish /app/publish .
    ENTRYPOINT [“dotnet”, “InstaTranscribeServerSide.dll”]“`

    Después de actualizar tu Dockerfile, reconstruye tu imagen de Docker y ejecuta tu contenedor de Docker nuevamente. Los archivos guardados desde tu aplicación de Docker en el directorio “/uploadedfiles” ahora deberían guardarse en el volumen “uploadedfiles” de Docker.

Comments are closed.