Docker Desktop 中打包docker镜像中跨平台问题

在vs2022 中将.Net(项目本地用的是ASP.NET CORE WEB (.NET6.0))打包成docker 镜像后为什么只能在windows 环境下运行而不能在linux(centos7)中运行能,要解释这个问题首先要搞清楚什么是docker desktop ,什么是windows 容器,什么是linux容器,这三者之间的相互关系是什么
这个问题在文心一言和通义千问中的回复基本一致,总结一下就是docker desktop 是个工具可以管理windows 容器和linux容器。windows容器是由Windows Server或者Hyper-V技术提供的服务(容器服务),Windows容器则直接在宿主机的Windows系统上运行;linux容器是基于Linux
内核的cgroups和命名空间技术提供的服务(容器服务),Docker Desktop可以轻松创建、管理和运行 Linux 或 Windows 容器.

                上图是在windows 容器下打包的镜像在linux 环境拉取时报错

所以当vs 创建的.net 项目基于windows容器(Docker Desktop 中此时选择的是windows容器)打包的镜像只能在windows环境中容器为windows容器时候运行,如果在打包的时切换成linux容器(Docker Desktop 中切换成linux容器)就可以跨平台支持了。当然选用liunx容器打包镜像时Dockerfile中build和publis 指令需要添加-r linux-x64  --self-contained (有些帖子说需要修改项目文件,比如添加<OutputType Condition="$(RuntimeIdentifier.StartsWith('linux'))">Library</OutputType>,经过实验发现在vs2022 .net6.0 环境下已经不需要,如果添加后反而出现容器运行失败)

        上图是在linux容器下打包的镜像在linux  环境成功运行

上图是在linux容器下打包的镜像在windows环境成功运行(此时Dock Desktop 切换为linux容器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值