在Windows上使用.NET部署到Docker 《让孩子们走出大坑》
折腾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/WSL 是否安装成功
以下是检查命令:
检查 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 主机。 ASP.NET Core 的 aspnetcore 映像具有多个优化。 |
mcr.microsoft.com/dotnet/aspnet:8.0-bullseye-slim | .NET 8 运行时-仅在 Linux Debian 发行版 |
mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 | .NET 8 运行时-仅在 Windows Nano Server 上(Windows Server 版本 1809) |
目前镜像支持的.NET版本还挺丰富,我最低拉了个core 3.1,中间那些net 5/6/7 的镜像都删了(主要是docker强制装C盘,我这C盘强迫症犯了可就要把所有不用的文件全部移出C盘)
如果走到这里,基本所有的大坑都踩完了。再就是常规开发代码+顺顺利利部署了(手动播放奥特曼BGM:奇迹再现)
打开VS 新建 core/framework 项目
- 选择镜像中支持的,.NET框架版本
- 启用Docker(其实这里勾不勾选都无所谓)
因为所谓的Docker支持在微软官网的解释中就是一个 Dockerfile 文件(没有后缀的文本文档)
大家有兴趣的话,可以在微软官网/文档=》搜索框输入:docker,出来的教学文档还挺多。
咋还可以在发布前添加docker支持
以下是糙米式讲解:
- 用什么镜像
- 构建誰
- 启动谁
以下是细糠式讲解:
1 # This my first nginx Dockerfile
2 # Version 1.0
3
4 # Base images 基础镜像
5 FROM centos
6
7 #MAINTAINER 维护者信息
8 MAINTAINER tianfeiyu
9
10 #ENV 设置环境变量
11 ENV PATH /usr/local/nginx/sbin:$PATH
12
13 #ADD 文件放在当前目录下,拷过去会自动解压
14 ADD nginx-1.8.0.tar.gz /usr/local/
15 ADD epel-release-latest-7.noarch.rpm /usr/local/
16
17 #RUN 执行以下命令
18 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
19 RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
20 RUN useradd -s /sbin/nologin -M www
21
22 #WORKDIR 相当于cd
23 WORKDIR /usr/local/nginx-1.8.0
24
25 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
26
27 RUN echo "daemon off;" >> /etc/nginx.conf
28
29 #EXPOSE 映射端口
30 EXPOSE 80
31
32 #CMD 运行以下命令
33 CMD ["nginx"]
指令 | 描述 |
---|---|
FROM | # 基础镜像,一切从这里开始构建 |
MAINTAINER | 镜像是谁写的,姓名+邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 添加内容: 比如加一个tomcat压缩包 |
WORKDIR | 镜像的工作目录 |
VOLUME | 镜像挂载的目录 |
EXPOSE | 保留暴露的端口 |
CMD | 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可以被代替 |
ENTRYPOINT | 指定这个容器启动的时候需要运行的命令,可以追加命令 |
ONBUILD | 当构建一个被继承DockerFile 的时候就会运行 ONBUILD 的指令。触发指令 |
COPY | 类似ADD ,将我们的文件拷贝到镜像中 |
ENV | 构建的时候设置环境变量 |
因为在docker容器里端口和https证书都需要配置,所以本地注释https证书。仅配置容器端口和主机端口相通
以下注释了https证书相关配置
以下dock容器端口绑定主机端口
紧接着一路开发下去,然后按照常规发布项目的方式发布到文件系统 (此处注意以下操作:)
项目内的dockfile 右键属性 ,复制到输出目录,设置始终复制
其实这一步你不设置,直接发布也行,将dockfile文件拷到发布目录一样行。(PS:手动笑脸)
接下来全部交给dows窗体和docker命令啦
- 管理员启动cmd
- cd 到发布目录
- docker build -t 你想要设置的镜像名称:1.0 .(它根据当前目录的dockerfile选择镜像源)
- docker run -d -p 你的docker容器端口如:56555:绑定的主机端口(在appsettings.json,url节点绑定的端口要一致)--name 你想要的容器名称--restart=always 你上条命令的镜像名称:1.0
- 最后在浏览器中访问docker部署的NET web应用程序
打开docker desctop,在containers,images选项中都能看到相关运行的容器和镜像源
也可以在cmd中使用
docker ps -a 查看正在运行的容器(不带-a 就是所有的容器,不区分是否正在运行)
docker images 查看所有的镜像源
以下附上 菜鸟教程 docker 命令大全
https://www.runoob.com/docker/docker-command-manual.html
全剧终。。。。。。
在Windows上使用.NET部署到Docker 《让孩子们走出大坑》的更多相关文章
- Windows 上使用 cygwin 连接到 docker toolbox
Windows 上使用 cygwin 连接到 docker toolbox Docker 确实给软件开发带来一些好处,在简化部署.统一开发.测试和生产环境上,有它独到的理念.Linux 上可直接安装 ...
- flask在windows上用mod_wsgi部署
flask在windows上用mod_wsgi部署也是折腾了不少时间,下面就总结下. 首先下载Apache httpd,我认为Apache Hans比较好: 一般这种情况下,你的python环境已经安 ...
- 在Windows上弄一个redis的docker容器
[本文出自天外归云的博客园] Docker核心概念简介 镜像是一个面向docker引擎的只读模板,包含了文件系统. 镜像是创建容器的基础,容器类似于一个沙箱,用来运行和隔离应用. 容器是从镜像创建的应 ...
- (转)在Windows上以服务方式运行 MSOPenTech/Redis
ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的Redis, ...
- 在Windows上以服务方式运行 MSOPenTech/Redis
ServiceStack.Redis 使用教程里 提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的 Redi ...
- nginx的简单使用和使用nginx在windows上搭建tomcat集群
nginx是一款轻量级的web服务器,常用的作用为服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器 1.为什么我们要使用Nginx? 反向代理: 反向代理(Reverse Proxy ...
- 在Windows上以服务方式运行 Redis
ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来 做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的Redis ...
- 【数据库开发】在Windows上以服务方式运行 MSOPenTech/Redis
在Windows上以服务方式运行 MSOPenTech/Redis ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这 ...
- 在Windows上使用Docker运行.NetCore
今天我们来说下如何在windows下使用docker运行.net core,既然是docker,那么我们首先得在windows上安装docker. 在Windows安装 docker 有两种选择 :1 ...
- 在windows下使用jenkins部署docker容器
在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...
随机推荐
- SpringBoot 集成短信和邮件
准备工作 1.集成邮件 以QQ邮箱为例 在发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码,获取授权码: 1.设置>账户 在账户的下面有一个开启SMTP协议的开关并进行密码 ...
- P1064-DP【绿】
好多好多天前写了这道题的50分代码,然后不知道错在哪里反复调没调对.然后这周我极度忙,忙死了,好不容易有一点时间再来审视这道题了,然后我5分钟想明白了一切...意识到自己此前的错误有多弱智... 把D ...
- java基础(15)--多态
一.多态的含义 1.多种形态.多种状态,指的是编译与运行有不同的状态 2.编译时->静态绑定 3.执行时->动态绑定 4.多类典型场景:父类的引用指向了子类型的对象 二.向下转型与向上 ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.22)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- TLS简单理解
TLS简单理解 TLS的历史 From GTP3.5 TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护.下面是 TLS 的历史概述: SSL(安全套接层):TLS ...
- [转帖]第24/24周 数据库维护(Database Maintenance)
https://www.cnblogs.com/woodytu/p/4795542.html 哇哦,光阴似箭!欢迎回到性能调优培训的最后一期.今天我会详细讲下SQL Server里的数据库维护,尤其是 ...
- [转帖]事务上的等待事件 —— enq: TM - contention
执行DML期间,为防止对与DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁.若在获得TM锁的过程中发生争用,则等待enq: HW - contention 事件. SQL> sel ...
- [转帖]01-rsync备份方式
https://developer.aliyun.com/article/885783?spm=a2c6h.24874632.expert-profile.284.7c46cfe9h5DxWK 简介: ...
- Gorm 应用开发时区问题与unique唯一索引字段数据冲突问题
目录 一.定义表模型时区问题 1.1 time.Time 与int64 1.2 优势 二.unique唯一索引字段数据冲突问题 一.定义表模型时区问题 1.1 time.Time 与int64 一般情 ...
- gRPC学习小札
gRPC 前言 为什么使用gRPC 传输协议 传输效率 性能消耗 gRPC入门 gRPC流 证书认证 使用根证书 gRPC实现token认证 和Web服务共存 验证器 REST接口 grpcurl工具 ...