【发布时间】:2020-02-27 00:38:14
【问题描述】:
最近几天,我试图在 Google Cloud App Engine 服务上部署 asp.net core 3.1 应用程序。我认为,我已经很接近了,但目前我在安装 npm 包时遇到了问题。
通常,我在我的 Razor 页面应用程序中将 node_modules 文件夹作为静态文件提供,所以我的 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 世界的新手,所以也许有人可以帮助我解决这个问题?
【问题讨论】:
标签: c# docker npm .net-core gcloud