Estoy tratando de ejecutar una nueva aplicación web ASP.NET core MVC desde un contenedor Docker en mi máquina con Windows 10.
No soy un experto en Docker, pero el puerto no parece estar vinculado al host. Obtengo una respuesta desde dentro del contenedor, pero no del host. La muestra 2.2 funciona bien para mí.
dotnet --version 3.0.100-preview6-012264Pasos para reproducir:
mkdir aspnetcore3_test cd .\aspnetcore3_test\ mkdir aspnetapp cd .\aspnetapp\ dotnet new mvc cd .. dotnet new sln dotnet sln "aspnetcore3_test.sln" add "aspnetapp/aspnetapp.csproj"Cree un archivo docker con el siguiente contenido:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build WORKDIR /app # copy csproj and restore as distinct layers COPY *.sln . COPY aspnetapp/*.csproj ./aspnetapp/ RUN dotnet restore ./aspnetapp/*.csproj # copy everything else and build app COPY aspnetapp/ ./aspnetapp/ WORKDIR /app/aspnetapp RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime WORKDIR /app COPY --from=build /app/aspnetapp/out ./ EXPOSE 80 ENTRYPOINT ["dotnet", "aspnetapp.dll"]Luego haz los bits de la ventana acoplable:
docker build -t dockertest . docker run --rm -it --name=dockertest dockertest:latest -p 80:80La ejecución de Docker genera lo siguiente:
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60] Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] No XML encryptor configured. Key {5b22d641-4632-4440-8f7d-8ad9b5e48098} may be persisted to storage in unencrypted form. info: Microsoft.Hosting.Lifetime[0] Now listening on: http://[::]:80 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /app Con el contenedor en ejecución, Firefox dice que no se pudo conectar y docker port dockertest aparece vacío
docker exec -i -t dockertest curl localhost escupe la plantilla HTML de la aplicación MVC
Al agregar -p 80:80 después del nombre de la imagen, en realidad está pasando -p 80:80 como los argumentos para el ejecutable de la imagen, en lugar de como un argumento para la ventana acoplable en sí. La solución es mover eso antes del nombre de la imagen:
docker run --rm -it --name=dockertest -p 80:80 dockertest:latest