最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口。以前的接口依然是使用Asp.Net Framework实现的,而.Net的处境也很窘迫,很多.Neter也都转想Java或Pythod的怀抱了,自己也在学Java,但作为一个工作了6年的.Neter,要放弃.Net实在也有些不甘,或者说在转java的过程中对未来的不确定性让自己也犹豫了好久,直到.Net Core发展到3.0,我在部门对.Net Core进行了分享,这一次的接口重构也落到我的手上,那么无可厚非,我建议使用.Net Core来实现,从架构搭建到实现,我将尽力去做好它。

  周五的时候,架构搭的七七八八,实现了登录功能后,在我将其部署到开发服务器上时,在我从官网中(https://dotnet.microsoft.com/download/dotnet-core/3.0)下载完运行环境,在服务器上安装完IIS的捆包运行包,将项目部署到IIS上之后,项目正常运行,过了会运维同事告知其他原先的.Net FrameWork站点应用程序池全部停止了,重启后只要一访问就自动停止,无法访问,随后他即卸载了我刚安装的运行环境,原先的站点也能访问了,目前我也还没找出是什么原因导致的,在我自己的电脑上是完全没有问题的,不知道是什么环境导致这个问题,如在你看到这篇文章的时候知道这个情况,烦请告知一二,谢谢。

  好吧,我先不折腾IIS上的问题,决定将其部署到Docker好了。

  于是就开始了这次的踩坑历程了。

  首先我在项目中添加了Docker支持,VS2019自动在项目文件夹下生成了Dockerfile文件,如下

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["src/H.Cms.Web.Api/H.Cms.Web.Api.csproj", "src/H.Cms.Web.Api/"]
COPY ["src/H.Cms.Infrastructure/H.Cms.Infrastructure.csproj", "src/H.Cms.Infrastructure/"]
COPY ["src/H.Cms.Core/H.Cms.Core.csproj", "src/H.Cms.Core/"]
COPY ["src/H.Cms.Application/H.Cms.Application.csproj", "src/H.Cms.Application/"]
COPY ["src/H.Cms.Web.Core/H.Cms.Web.Core.csproj", "src/H.Cms.Web.Core/"]
RUN dotnet restore "src/H.Cms.Web.Api/H.Cms.Web.Api.csproj"
COPY . .
WORKDIR "/src/src/H.Cms.Web.Api"
RUN dotnet build "H.Cms.Web.Api.csproj" -c Release -o /app/build FROM build AS publish
RUN dotnet publish "H.Cms.Web.Api.csproj" -c Release -o /app/publish FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "H.Cms.Web.Api.dll"]

  接下来我将整个项目上传到我的虚拟机centos 7上,开始使用下面的pscp命令时,坑来了,文件夹名称不能有空格。

pscp -r F:/aspnet core/hcms root@192.168.143.122:/usr/soft

  好吧,无奈换成Secure Shell Client来上传,完成后,我使用putty登录我的虚拟机centos7,进入/root/source/HCms项目中,进入H.Cms.Web.Api目录中,使用docker build构建镜像时,提示错误了

docker build -t docker build -t jesen/hcms:1.0 .

  查看了下Dockerfile文件,好吧,Dockerfile文件从src开始,我把它拷贝到src同目录中,再次运行docker build ,这下果然,正常运行了,开始docker中不存在.netcore 3.0的环境,需要先下载安装,但是过程很缓慢,于是我去睡了个午觉,醒来后果然下好了,但是到了dotnet restore命令的时候,一直报api.nuget.org访问不了,天了噜,我从浏览器上直接访问没问题啊。这个问题花了我好久,最终我想说那我不在docker中restore了吧,我把项目发布出来在直接在docker中发布好吧,于是在VS中我选择了linux-x64的平台发布,欸,问题来了,也是报api.nuget.org访问不了,但这个时候有个ip了23.101.10.141,在 https://site.ip138.com中查询了一下,香港的ip,我想,最近香港暴力事件很严重,不是影响了吧,抱着试一试的心态,我通过修改host文件 ,添加了指向新加坡的IP,刷新DNS解析

104.215.155.1 api.nuget.org
ipconfig /flushdns

  重新在VS中发布,天了噜,真的发布成功了,好吧,那我就把虚拟机的/etc/hosts文件也添加这个IP解析吧,果不其然,在我再次运行docker build的时候,虽然等了一会,最后成功了,真的成功了。

  docker build 构建好镜像后,接下来就是要运行镜像,看看是否能正常在docker中运行了,运行docker run

docker run -d -p : -v ~/docker/aspnetcore/hcms/conf/appsettings.json:/app/appsettings.json -name hcms jesen/hcms:v1.

  开始我将挂载的appsettings.json文件写成了文件夹,报错了,没有注意到是这个问题,然后就用docker exec命令去查看docker容器里的hcms,发现没问题

docker exec -it hcms sh

  回来找完才知道是文件不存在,好吧,将~/docker/aspnetcore/hcms/conf/appsettings.json/目录删掉,新建appsettings.json文件,将配置信息也拷贝到该文件上,修改数据库链接IP地址,在主机上使用虚拟机的IP地址进行访问,页面正常加载。

  但是当我访问某个API时,报错了,我想应该是数据库链接IP访问不到,于是看了主机的防火墙,开着的,好吧,加了入站规则,放开1433端口,再次访问,正常了。

  以上就是将Asp.Net Core 3.0部署到docker上的过程,虽然花了一些时间,但也总算完美运行起来了,这让我在接下来的项目中勇敢的提倡使用.Net Core来开发增加了信心,加油!

记一次Docker中部署Asp.Net Core 3.0的踩坑过程的更多相关文章

  1. 在 Docker 中部署 ASP.NET CORE 应用

    有了 Docker 之后, 部署起来却这间非常方便,环境不用搭了, 直接创建一个 microsoft/aspnetcore 的容器, 在本地开发好后, 把内容直接部署到容器中. 下面的命令是把本地发布 ...

  2. 在Docker中部署ASP.NET Core 2.2

    ⒈新建一个ASP.NET Core2.2 Web程序 因为Windows的Docker和Linux的Docker有所不同,本次测试采用的是Linux的Docker,因此没有勾选启用Docker支持. ...

  3. Centos 7 中 部署 asp.net core 3.0 + nginx + mongodb 的一些新手简单入门,非docker

    目录 零.准备工作 一.部署Mongodb 1.安装Mongodb 2.创建mongodb的数据目录 3.设置目录权限 4.设置mongodb启动 5.修改mongodb的配置文件 6.启动Mongo ...

  4. Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  5. Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  6. 使用docker来部署asp.net core的程序

    使用docker来部署asp.net core程序 暂不介绍docker是个什么东西?不知道的自己百度. 第一步安装docker: 我的docker是装在centos7系统上,windows上我的也用 ...

  7. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  8. 丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  9. 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用

    使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...

随机推荐

  1. java SSM面试题

    1. 谈谈你mvc的理解MVC是Model—View—Controler的简称.即模型—视图—控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC中的模型.视图.控制器它们 ...

  2. StringTokenizer字符串分解器

    示例: StringTokenizer st = new StringTokenizer(key, ",", false); while (st.hasMoreTokens()) ...

  3. datediff(date1,date2) 函数的使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在MySQL中可以使用DATEDIFF()函数计算两个日期之间的天数 语法: datediff(date1,date2) 注:date1和date ...

  4. exception内置对象

    当当前页面可能发生异常的时候,此页面将此异常交给另外一个页面处理 在page处添加    errorPage="处理异常的页面.jsp" 在异常处理的页面的page处应该添加  i ...

  5. box-sizing 盒子模型

    一.概念 ①外加模式: box-sizing: content-box 这是由 CSS2.1 规定的宽度高度行为.宽度和高度分别应用到元素的内容,在宽度和高度之外绘制元素的内边距,即宽和高不包括内边距 ...

  6. 嘉立创制作PCB流程

    现在做板子基本上是选择嘉立创和捷配,今天看一下嘉立创如何下PCB和STM贴片单,改天再写一下捷配的下单 我喜欢用下单助手,比较方便 注意需要把自己的板子的PCB文件用压缩软件生成压缩包文件,名字自己取 ...

  7. 2016级移动应用开发在线测试14-MediaPlayer

    有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. MediaStore类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提 ...

  8. GoCN每日新闻(2019-10-11)

    GoCN每日新闻(2019-10-11) GoCN每日新闻(2019-10-11) 1. golang 将数据库转换为gorm结构 https://studygolang.com/articles/2 ...

  9. 第08组 团队Git现场编程实战

    一.组员职责分工 算法:庄锡荣,林鑫灿 UI:许煌标,蔡峰,林晓锋,陈珊珊,侯雅倩,吴珂雨 博客:陈珊珊,王钟贤 二.github提交日志 三.程序运行截图 运行中爬取到的部分信息 数据库中的部分信息 ...

  10. el-table里面的列需要对比两个返回参数

    需求是这样的--- 已发布时间超过30分钟,显示黄色,超过一个钟显示红色 现在后台返回的时间的格式是2018-10-22 11:23:23的格式 做法是: 第一步: 先将后台返回的格式转化为时间戳,然 ...