同一ASP.NET运行时容器能否安装多版本ASP.NET Core框架
能否在同一个ASP.NET运行时容器中安装不同版本的ASP.NET Core框架
可以,.NET及ASP.NET Core运行时原生支持多版本并排安装,同一容器环境内可以同时存在多个不同版本的运行时,互相不会产生冲突。
报错原因
当前使用的基础镜像mcr.microsoft.com/dotnet/aspnet:6.0-focal仅预装了6.0版本的ASP.NET Core运行时,部署的编译后Server.dll基于Microsoft.AspNetCore.App 5.0.0版本编译,运行时找不到匹配的最低版本依赖,就会抛出框架找不到的错误。
官方dotnet镜像的区别
Docker Hub上的官方dotnet镜像按预装内容不同,分为以下几类:
runtime-deps:仅包含运行.NET应用所需的原生系统级依赖,不自带任何.NET相关组件,体积最小,仅适合运行已经做了自包含发布的.NET应用runtime:在runtime-deps基础上预装了.NET基础运行时,仅能运行不依赖ASP.NET Core框架的控制台类、普通服务类.NET应用aspnet:在runtime基础上额外预装了ASP.NET Core运行时和Web场景相关的优化配置,是运行ASP.NET Core Web应用/服务的标准运行时镜像sdk:包含完整的.NET开发编译、调试、包管理工具链,既可以构建.NET应用也可以运行应用,体积最大,一般仅在镜像构建阶段使用
在现有镜像中安装5.0版本ASP.NET Core运行时的方法
直接修改现有Dockerfile,在基础镜像拉取后增加5.0运行时的安装步骤即可,无需项目源码,修改后的Dockerfile参考如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal # 安装ASP.NET Core 5.0最新补丁版运行时 RUN apt-get update \ && apt-get install -y --no-install-recommends wget \ && wget https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-x64.tar.gz -O /tmp/aspnet5.tar.gz \ && tar -oxzf /tmp/aspnet5.tar.gz -C /usr/share/dotnet \ && rm /tmp/aspnet5.tar.gz \ && apt-get remove -y wget \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* COPY ./appsettings.json /icon/Server-Files/ WORKDIR /icon COPY ./* /icon/Server-Files/ CMD [ "dotnet", "Server-Files/Server.dll" ]
注意:.NET 5已经结束官方支持,这里选用5.0分支的最终补丁版本5.0.17,覆盖所有已知安全漏洞,且5.0.x系列运行时向后兼容,完全满足程序要求的5.0.0最低版本依赖。
镜像构建启动后,可以在容器内执行dotnet --list-runtimes命令验证安装结果,输出中同时存在5.0.17和原有6.0版本的Microsoft.AspNetCore.App条目时,程序即可正常加载运行。
内容的提问来源于stack exchange,提问作者user4851126
相关产品推荐
相关产品推荐

