安裝 VS2022 后 Docker 部署 ASPNETCore 6 項目報錯解決方法


問題

今天(2921-11-09)VS2022 正式版發布了,我當然是閃現上去安裝了最新版本。然后我用 VS2022 編譯了我之前在 dotnet 6 rc2 的時候創建的 ASP.NET Core 6 的項目,用 docker 部署到服務器上,boom 了。下面是使用 docker logs 命令查看的日志:

It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '6.0.0' (x64) was not found.
  - The following frameworks were found:
      6.0.0-rc.2.21480.5 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

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.NETCore.App&framework_version=6.0.0...........

可以很清楚的猜到,是 .NET 6 正式版發布前后,我的項目部署時使用的版本混亂造成的的小小問題。

本地環境

現在我電腦上是 VS2022 正式版和 Preview 版本並存。

同時,我的電腦上 .NET SDK 也有多個版本共存:

> dotnet --list-sdks
5.0.402 [C:\Program Files\dotnet\sdk]
6.0.100-rc.2.21505.57 [C:\Program Files\dotnet\sdk]
6.0.100 [C:\Program Files\dotnet\sdk]


可以看到,6.0.100 的正式版 SDK 已經被安裝上了。

服務器環境

服務器上有前些日子 pull 下的 ASPNET 鏡像,tag 是 6.0,也不知道是正式版還是 rc2 :

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
mcr.microsoft.com/dotnet/aspnet     6.0       980c8f80fc21   3 weeks ago      208MB
...

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
EXPOSE 80
...

可以看到我的 Dockerfile 中指定的 aspnet 鏡像的 tag 是 6.0。

查找問題

在服務器上使用 docker inspect 命令查看一下服務器上 mcr.microsoft.com/dotnet/aspnet:6.0 的鏡像詳情:

......

"Env": [
                ......
                
                "DOTNET_VERSION=6.0.0-rc.2.21480.5",
                "ASPNET_VERSION=6.0.0-rc.2.21480.10",
                
                ......
        ],
        
......

確定了雖然這個鏡像的 tag 是 6.0,但他的 .NET 版本還是 .NET 6 RC2。

我這次編譯是用的今天安裝 VS2022 時,安裝的正式版 .NET 6 SDK 編譯的。所以我猜測 RC 2 的 環境無法運行正式版編譯的項目。

解決方案

嘗試在服務器上 pull 一下 latest 的鏡像:

$ docker pull mcr.microsoft.com/dotnet/aspnet

使用 docker images 命令查看一下當前的鏡像:

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
mcr.microsoft.com/dotnet/aspnet     latest    2fc5b10637a6   19 hours ago     208MB
mcr.microsoft.com/dotnet/aspnet     6.0       980c8f80fc21   3 weeks ago      208MB

可以看到 pull 下了一個 tag 為 latest 的鏡像,而且是 19 小時之前剛剛被創建。

然后修改項目的 Dockerfile 文件,將使用的 ASPNET 鏡像的 tag 改成 latest:

FROM mcr.microsoft.com/dotnet/aspnet:latest
WORKDIR /app
EXPOSE 80
...

然后重新 build 重新 run,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM