在Windows上使用.NET部署到Docker 《让孩子们走出大坑》 让孩子们走出大坑 Windows Docker .NET 上使用 部署到 NET
折腾Docker 有几天了,整别的都没这个糟心。目前已经顺利部署运行起来了。顺便给大家分享下处理在Windows上使用.NET部署到Docker的相关问题解决方法。
1. Docker无法安装问题
(下图是网上找了个类似的安装失败截图,页面大致一样,就是提示内容是 Docker Desktop 只能运行在win10 企业版/教育版 并且版本号1904以上)
首先呢我是Win10 教育版 并且版本长期不更新。
所以只能打开Windows更新 更新到1904版本吧,发现还是不行。于是升级到企业版好了。
以下是教育版升级企业版的方法
cmd命令提示符下依次操作如下命令即可:
lmgr.vbs /upk
slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43
slmgr /skms zh.us.to
slmgr /ato
然后网上下一个免费的Win10激活工具 DragonKMS
然后就可以在Win10 上安装 Docker Desktop啦
至于Win7/Win8 可以安装 Docker Toolbox
2. starting the Docker Engine / Docker 命令失败,退出代码 125
在这里要注意了,安装好后会默认启动Docker。
starting the Docker Engine 是Docker 客户端一直在start 状态(就是起不来,这个状态是启动中,正常状态是is runing,如下所示)
Docker 命令失败,退出代码 125 这是从VS 客户端启动时报的错 (其实百度搜一下Docker错误码,这话意思还是Docker起不起来)
主要的问题在2点
1.打开下面这五个功能再重启Docker试试
依然还是起不来的话就恭喜你往下看
2 适用于linnux的windows 子系统是打开了,但是wsl/wsl2 发行版没装
通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),所以需要选择一个具体的版本并安装,推荐安装WSL2具体的版本
以下是微软安装WSL具体版本的方法。
https://learn.microsoft.com/zh-cn/windows/wsl/install
安装完记得检查WSL/WSL2 是否安装成功
以下是检查命令:
检查 Windows 11 上的 WSL 版本
要检查 Windows 11 上安装的 WSL 版本,请使用以下步骤:
1. 在 Windows 11 上打开开始。
2. 搜索Command Prompt,右键单击顶部结果,然后选择以管理员身份运行选项。
3. 键入以下命令以检查设备上是否安装了 WSL 2 或 WSL 1,然后按Enter 键:
wsl --list --verbose
这应该是正常的返回值列表。
注意还有一步要做!!!
这时候大家的docker 应该都属于Runing 状态了,但是docker 默认是按照linux 环境配置的,可以切换到windows 环境。鼠标右键桌面右下角托盘内的docker图标, 中间的选项有一个 switch to windows containers..
docker在linux环境的配置选项 应该是 switch to windows containers..(目前在linux环境,点击后切换到windows环境)
docker在windows环境的配置选项 应该是 switch to linux containers..(目前在windows环境,点击后切换到linux环境)
3.分析引用时出错:“mcr.microsoft.com/dotnet/aspnet:5.0 AS base”不是有效的存储
标注的位置不一定要是aspnet:5.0,可能也是 aspnet:8.0nanoserver-1809,net core3.1,xxxx 等。
当然这一步是概率问题。主要是docker拉取镜像源的网络此时与你不通罢了。
这一刻聪明的同学们就会去搜索 (中科大,163,微软中国,docker中国等等)国内镜像源地址,然后开心的发现没一个通的。所以要继续往后看:
以下提供本人阿里云杭州docker镜像源地址:
针对安装了Docker for Windows的用户,您可以参考以下配置步骤:
在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Daemon。编辑窗口内的JSON串,填写下方加速器地址:
{
"registry-mirrors": ["https://ku9r06hg.mirror.aliyuncs.com"]
}
编辑完成后点击 Apply 保存按钮,等待Docker重启并应用配置的镜像加速器。
注意
Docker for Windows 和 Docker Toolbox互不兼容,如果同时安装两者的话,需要使用hyperv的参数启动。
docker-machine create --engine-registry-mirror=https://ku9r06hg.mirror.aliyuncs.com -d hyperv defaul
其实,如果是企业或者个人想要尝试,也可以自己注册阿里云docker镜像源地址,在阿里云搜索框输入:镜像加速。
注册好就能用啦。
4.支持docker的.Net版本有哪些
在Microsoft 搜索有关于Docker的文档有如下注解:
看了官网这么多文档,大家应该知道了,微软非常建议大家使用.NET7/8 部署到docker;尤其推荐.NET8 (但是并不代表不支持低版本)
以下放出支持的所有.NET版本:
总结起来就是:NET 5,6,7,8 NET CORE 2,3 部分framework 都能在docker中运行
只要能拉到镜像,那么此.NET框架就是在docker中允许运行的
可以用以下命令尝试拉取镜像:
docker pull 镜像名:标签
(其实命令中不带标签也行)
以下是关于.NET 8 的镜像源
图像 | 注释 | mcr.microsoft.com/dotnet/runtime:8.0 .NET 8 多体系结构:支持 Linux 和 Windows Nano Server,具体取决于 Docker 主机。 mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core 8.0 多体系结构:支持 Linux 和 Windows Nano Server,具体取决于 Docker 主机。指令 | 描述 | FROM # 基础镜像,一切从这里开始构建 MAINTAINER 镜像是谁写的,姓名+邮箱 RUN 镜像构建的时候需要运行的命令 ADD 添加内容: 比如加一个tomcat压缩包 WORKDIR 镜像的工作目录 VOLUME 镜像挂载的目录 EXPOSE 保留暴露的端口 CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被代替 ENTRYPOINT 指定这个容器启动的时候需要运行的命令,可以追加命令 ONBUILD 当构建一个被继承DockerFile 的时候就会运行 ONBUILD 的指令。触发指令 COPY 类似ADD ,将我们的文件拷贝到镜像中 ENV 构建的时候设置环境变量
---|