部署 Asp.net 5 个应用程序失败 "Alternatively, install the framework version '5.0.0'"
Deploy Asp.net 5 application Fails with "Alternatively, install the framework version '5.0.0'"
我正在尝试将 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" ]
现在尝试推到Google云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
The specified framework 'Microsoft.AspNetCore.App', version '5.0.0' was not found.
- Check application dependencies and target a framework version installed at:
/usr/share/dotnet/shared/Microsoft.AspNetCore.App
- Alternatively, install the framework version '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>
您可以通过 4 种方式在 gcpASP.NET 中部署应用程序
1.Deploy 从 Visual Studio 直接使用 Cloud Tools for Visual Studio extension.
2.Deploy a Framework Dependent Deployment ,j with "dotnet publish"
3.Deploy 到带有自定义 Dockerfile 的 App Engine 柔性环境
4.Deploy 使用自定义 Dockerfile 到容器引擎。
尝试使用自定义 dockerfile 部署到容器引擎,因为它比其他方法更简单。
这里是 documentation 所有 4 种方法的详细过程。
在@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
的问题,你将无法将它暴露给外部。
我正在尝试将 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" ]
现在尝试推到Google云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
The specified framework 'Microsoft.AspNetCore.App', version '5.0.0' was not found.
- Check application dependencies and target a framework version installed at: /usr/share/dotnet/shared/Microsoft.AspNetCore.App
- Alternatively, install the framework version '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>
您可以通过 4 种方式在 gcpASP.NET 中部署应用程序
1.Deploy 从 Visual Studio 直接使用 Cloud Tools for Visual Studio extension.
2.Deploy a Framework Dependent Deployment ,j with "dotnet publish"
3.Deploy 到带有自定义 Dockerfile 的 App Engine 柔性环境
4.Deploy 使用自定义 Dockerfile 到容器引擎。
尝试使用自定义 dockerfile 部署到容器引擎,因为它比其他方法更简单。
这里是 documentation 所有 4 种方法的详细过程。
在@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
的问题,你将无法将它暴露给外部。