В последние несколько дней я пытаюсь развернуть приложение asp. net core 3.1 в службе Google Cloud App Engine. Я думаю, что я довольно близко, но на данный момент у меня проблема с установкой npm пакетов. Как правило, я использую папку node_modules в виде stati c файлов в моем приложении страниц Razor, поэтому у меня в классе Startup.cs
есть такой фрагмент кода:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "node_modules")),
RequestPath = "/node_modules"
});
Облако Google не поддерживает. net core 3.1 на данный момент, поэтому единственный способ развернуть приложение - это развернуть его как Docker образ. Итак, вот мой Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY myApp/myApp.csproj myApp/
COPY myApp.DataAccess/myApp.DataAccess.csproj myApp.DataAccess/
COPY myApp.Model/myApp.Model.csproj myApp.Model/
RUN dotnet restore myApp/myApp.csproj
# copy and build app and libraries
COPY myApp/ myApp/
COPY myApp.DataAccess/ myApp.DataAccess/
COPY myApp.Model/ myApp.Model/
WORKDIR /source/myApp
RUN dotnet build -c release
FROM build AS publish
RUN dotnet publish -c release --no-build -o /app
# npm libs
FROM node:10
WORKDIR /app
COPY myApp/package.json .
COPY myApp/package-lock.json .
RUN npm install
RUN npm root
# final stage/image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myApp.dll"]
Сборка docker успешна, но когда я пытаюсь запустить контейнер, есть такое исключение:
System.IO.DirectoryNotFoundException: /app/node_modules/
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root, ExclusionFilters filters)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider..ctor(String root)
at UniCableApp.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, RoleManager`1 roleManager, UserManager`1 userManager) in /source/UniCableApp/Startup.cs:line 113
Я создал Изображение остановленного контейнера с использованием:
docker commit <id> <snapshot name>
После этого я смог проверить изображение с помощью:
docker run -ti --entrypoint=sh<snapshot name>
И в каталоге / app нет папки node_modules. Как я уже сказал, я новичок в мире Docker, так что, может быть, кто-то может помочь мне с этим вопросом?