【问题标题】:Docker - The framework microsoft.AspNetCore.App, version '3.1'0 was not found on buildDocker - 构建时找不到框架 microsoft.AspNetCore.App,版本 '3.1'0
【发布时间】:2020-05-26 06:12:49
【问题描述】:

我正在尝试了解 docker 以及如何将 .NET 核心 Web 应用程序容器化。我一直在按照下面的教程进行操作,并取得了不错的进展,除非我实际运行我的项目。

https://devblogs.microsoft.com/premier-developer/running-a-net-core-web-application-in-docker-container-using-docker-desktop-for-windows/

我在 Visual Studio 中构建了一个 .NET Core 应用程序,并且正在使用 .NET Core 3.1,并且我(认为)已经验证了所有正确的 .NET Core 版本都已安装,但 docker 似乎认为什么都没有。我的项目可以正确构建,但是当我尝试运行它时,我发现没有找到 .NET 框架。

我是 docker 和 .NET 核心的新手,所以我肯定会遗漏一些明显的东西,所以如果您有任何建议,请告诉我!谢谢!

dotnet --info

.NET Core SDK (reflecting any global.json):
 Version:   3.1.101
 Commit:    b377529961

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.101\

Host (useful for support):
  Version: 3.1.1
  Commit:  a1388f194c

.NET Core SDKs installed:
  3.0.102 [C:\Program Files\dotnet\sdk]
  3.1.101 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.15 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

docker pull mcr.microsoft.com/dotnet/core/runtime:3.1

3.1: Pulling from dotnet/core/runtime
ee446884f7be: Already exists
e60301a457d1: Already exists
9aa45ac596a4: Already exists
a0172a0e2f05: Already exists
0e4e03cc72ce: Already exists
d12a8fd361d3: Already exists
Digest: sha256:1a314313bbfc550897fb760dc05c816f42e7f911c8bb8a4c9b5bde3cdad6ac76
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/runtime:3.1
mcr.microsoft.com/dotnet/core/runtime:3.1

docker build -t aspnetapp 。 将构建上下文发送到 Docker 守护进程 4.392MB

Step 1/10 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
 ---> abe8d004f003
Step 2/10 : WORKDIR /app
 ---> Using cache
 ---> baf04998e0f5
Step 3/10 : COPY *.csproj ./
 ---> Using cache
 ---> 57d5b8ce9b8b
Step 4/10 : RUN dotnet restore
 ---> Using cache
 ---> 3a78664422c1
Step 5/10 : COPY . ./
 ---> 7ad7515946be
Step 6/10 : RUN dotnet publish -c Release -o out
 ---> Running in 7b9fd1655346
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 41.18 ms for C:\app\aspnetapp.csproj.
  aspnetapp -> C:\app\bin\Release\netcoreapp3.1\aspnetapp.dll
  aspnetapp -> C:\app\bin\Release\netcoreapp3.1\aspnetapp.Views.dll
  aspnetapp -> C:\app\out\
Removing intermediate container 7b9fd1655346
 ---> df9351064b25
Step 7/10 : FROM mcr.microsoft.com/dotnet/core/runtime:3.1
 ---> 96ec6546e277
Step 8/10 : WORKDIR /app
 ---> Running in 33e62d3940a5
Removing intermediate container 33e62d3940a5
 ---> 0fe4ecf63895
Step 9/10 : COPY --from=build-env /app/out .
 ---> fe8793b4a38d
Step 10/10 : ENTRYPOINT ["dotnet", "aspnetapp.dll"]
 ---> Running in a856a898d3f9
Removing intermediate container a856a898d3f9
 ---> 4802cf9997df
Successfully built 4802cf9997df
Successfully tagged aspnetapp:latest

码头文件

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env

WORKDIR /app

# Copy csproj and restore as distinct layers

COPY *.csproj ./

RUN dotnet restore

# Copy everything else and build

COPY . ./

RUN dotnet publish -c Release -o out

# Build runtime image

FROM mcr.microsoft.com/dotnet/core/runtime:3.1

WORKDIR /app

COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "aspnetapp.dll"]

码头工人错误

docker run -p 8080:80 --name myapp aspnetapp
docker : It was not possible to find any compatible framework version
At line:1 char:1
+ docker run -p 8080:80 --name myapp aspnetapp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (It was not poss...amework version:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
  - No frameworks were found.
You can resolve the problem by installing the specified framework and/or SDK.
The specified framework can be found at:
  - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=x64&rid=win10-x64

.csproj

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>



</Project>

docker 镜像 -ls

REPOSITORY                              TAG                      IMAGE ID            CREATED             SIZE
aspnetapp                               latest                   4802cf9997df        14 minutes ago      326MB
<none>                                  <none>                   df9351064b25        14 minutes ago      748MB
<none>                                  <none>                   05d5c7a53a75        18 minutes ago      748MB
<none>                                  <none>                   cfc51668b9c9        40 minutes ago      400MB
<none>                                  <none>                   c158d7286812        40 minutes ago      782MB
<none>                                  <none>                   42135746c732        About an hour ago   400MB
<none>                                  <none>                   a898ac91a635        About an hour ago   748MB
<none>                                  <none>                   6c73f17b1c56        2 hours ago         1.66GB
<none>                                  <none>                   bcdcd1874e78        2 hours ago         1.66GB
myimage                                 latest                   1b4d8c7dffe4        3 hours ago         341MB
mcr.microsoft.com/dotnet/core/samples   aspnetapp                17070fe9e96c        8 days ago          346MB
mcr.microsoft.com/dotnet/core/samples   latest                   425e8480ff0f        8 days ago          322MB
hello-world                             latest                   42514ac01c56        3 weeks ago         251MB
mcr.microsoft.com/dotnet/core/sdk       3.1                      abe8d004f003        3 weeks ago         731MB
microsoft/dotnet                        sdk                      bd7379c04097        3 weeks ago         1.66GB
mcr.microsoft.com/dotnet/core/aspnet    3.1                      704413499629        3 weeks ago         341MB
mcr.microsoft.com/dotnet/core/runtime   3.1                      96ec6546e277        3 weeks ago         321MB
microsoft/dotnet                        2.1-aspnetcore-runtime   3c196369ffdc        3 weeks ago         395MB
microsoft/dotnet                        aspnetcore-runtime       3c196369ffdc        3 weeks ago         395MB
microsoft/dotnet                        3.0-aspnetcore-runtime   04b08b1edcee        11 months ago       437MB

【问题讨论】:

    标签: c# .net docker asp.net-core docker-for-windows


    【解决方案1】:

    对于 ASP.NET Core,您需要来自 mcr.microsoft.com/dotnet/core/aspnet 的匹配容器映像。 mcr.microsoft.com/dotnet/core/runtime 没有额外的 ASP.NET Core 部分,仅适用于使用基本框架的 .NET Core 应用程序。

    【讨论】:

    • 嘿 Yaakov - 我把我的改成了使用 aspnet:3.1 和 runtime:3-1。它开始以“非零代码:” 2147516561 在 dotnet 还原上失败。我通过将 SDK 用于两个 FROM 命令使其正常工作。我有理由不使用 SDK 吗? SDK不应该同时匹配运行时和aspnet版本吗?
    • 一般的想法是您使用sdk 容器来构建您的代码,然后使用runtime、aspnet 或runtime-deps 来运行 它,视情况而定。最后三个是较小的容器,需要较少的生产环境资源。
    • @yakoov 感谢您的回复!所以我们在这里只看一个间距约束。我发现我可以使用 Visual Studio 构建/部署我的容器到我的天蓝色沙箱,到目前为止,这对我来说效果很好。
    【解决方案2】:

    我用 PowerShell 解决了这个为 docker 安装 SDK:

    docker pull mcr.microsoft.com/dotnet/core/sdk:3.1

    之后,我在我的项目中更改了这几行 DockerFile:

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
    FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
    

    到:

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
    

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2020-08-24
      • 2021-03-22
      • 2022-08-17
      • 2018-11-08
      • 2019-10-06
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多