【问题标题】:Deploy Asp.net 5 application Fails with "Alternatively, install the framework version '5.0.0'"部署 Asp.net 5 应用程序失败并显示“或者,安装框架版本 '5.0.0'”
【发布时间】:2021-09-27 10:43:29
【问题描述】:

我正在尝试将 asp .net 5 应用程序部署到 Google Kubernetes Engine。在我对生产应用程序执行此操作之前,我认为最好从基础开始并部署一个简单的 .net 5 Web 应用程序。

我创建了一个简单的网络应用程序

mkdir HellowWorldAspNet
cd HellowWorldAspNet
dotnet new web
dotnet restore 
dotnet publish

cd \bin\Debug\net5.0\publish

然后我创建了一个 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS build
ADD ./ /app
ENV ASPNETCORE_URLS=http://*:${PORT}
WORKDIR /app
ENTRYPOINT [ "dotnet", "HellowWorldAspNetCore.dll" ]

现在我尝试将其推送到谷歌云 K8s

// publish the google container
gcloud builds submit --tag gcr.io/{MyProject}/hello-dotnet:v1

// run the pod
kubectl run hello-dotnet --image gcr.io/{MyProject}/hello-dotnet:v1 --port=8080

// Show what pods are running
kubectl get pods

表演

当我检查我看到的 pod 的日志时

kubectl logs hello-dotnet

找不到指定的框架“Microsoft.AspNetCore.App”,版本“5.0.0”。

  • 检查应用程序依赖关系并定位安装在以下位置的框架版本: /usr/share/dotnet/shared/Microsoft.AspNetCore.App
  • 或者,安装框架版本“5.0.0”。

我假设它与 docker 文件有关,但据我所知,这应该是 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS build 告诉它至少使用 .net 5 构建我是否告诉它也与它一起运行?

改成

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

没能帮上忙。

诚然,我正在关注一个非常古老的 Deploying ASP.NET Core apps to Kubernetes on Google Container Engine 视频,但这是我能找到的 asp.net 的最佳示例

这也没有多大帮助

我也尝试遵循此示例.NET 5.0 on Google Cloud 从中获取 docker 文件。

FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
WORKDIR /app
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT [ "dotnet", "HellowWorldAspNetCore.dll" ]

结果是一样的。

更新

hellowWorldAspNetCore.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

【问题讨论】:

  • 你能分享你的应用程序的项目文件的内容吗?我想知道 5.0.0 与 5.0 的最新服务版本是否存在硬依赖。对此进行测试的一种方法是使用 5.0.0 Docker 标签将其固定到该特定版本(例如5.0.0-alpine3.12)。
  • 我已经添加了cs proj文件。 @MattThalman 我对此很陌生,实际上只是复制了我在示例中找到的内容。 dotnet new web 似乎创建了一个标准的 .net 5 应用程序。有什么地方可以在这​​里获取其他可用选项的列表吗?
  • @MattThalman 感谢您的提示,它不起作用。我有一个将它暴露给外界的新问题,但这是一个不同的问题,我正在研究它。

标签: .net asp.net-core google-cloud-platform google-kubernetes-engine


【解决方案1】:

有 4 种方法可以在 gcp 中部署 ASP.NET 应用程序

1.使用Cloud Tools for Visual Studio extension.直接从Visual Studio部署

2.使用“dotnet publish”部署Framework Dependent Deployment,j

3.使用自定义 Dockerfile 部署到 App Engine 柔性环境

4.使用自定义 Dockerfile 部署到 Container Engine。

尝试使用自定义 dockerfile 部署到容器引擎,这是一种比其他方式更简单的方式。

这里是documentation,其中包含所有 4 种方式的详细过程。

【讨论】:

  • 我正在尝试部署到 Kubernetes Engine。我看不出我对你的第 4 点有什么不同。你能看到我做错了什么吗?
【解决方案2】:

在 cmets 中 @Matt Thalman 的提示之后,我进行了一些挖掘,发现如果我删除 -alpine 它现在可以构建并运行

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
WORKDIR /app
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENV ASPNETCORE_URLS=http://*:${PORT}
ENTRYPOINT [ "dotnet", "HellowWorldAspNetCore.dll" ]

注意:记住ENV ASPNETCORE_URLS=http://*:${PORT} 很重要,否则您最终会遇到Now listening on: http://[::]:80 的问题,并且您将无法将其暴露在外部。

【讨论】:

  • 既然您的问题已经解决,您能否接受您发布的解决方案?
  • @GoliNikitha SO 让您等待一个小时才能接受自己的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2019-04-27
  • 2021-04-16
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多