最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在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. SQL中的trim函数

    Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的 ...

  2. AST11103 Problem Solving

    AST11103 Problem Solving with Programming SkillsAdditional Individual Assignment: Min-Game Programmi ...

  3. shell脚本awk的基本用法

    AWK 1 AWK 2 3 linux取IP地址 4 5 ifconfig | grep -w inet | sed -n '1p' | awk '{print $2}' 6 7 eg: 8 9 aw ...

  4. 干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析

    00 前言 相信大家对branch and price的神秘之处也非常好奇了.今天我们一起来揭秘该算法原理过程.不过,在此之前,请大家确保自己的branch and bound和column gene ...

  5. HTML之微信全屏播放视频

    不废话,上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. 【洛谷P5019】铺设道路

    题目链接 众所周知,这道题和积木大赛是同一道题 题意就是给出一段自然数序列,每次操作\((L,R)\)把区间\([L,R]\)的数全部减一,不允许出现负数,问把序列变为零的最小操作次数 贪心做法 样例 ...

  7. java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.() is not accessible from jav

    java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.<init>() is not accessible fr ...

  8. Centos 7 更换为 阿里云 yum 源

    地址: https://opsx.alibaba.com/ 操作步骤: 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentO ...

  9. MySQL 自动插入、更新时间戳

    在 MySql 中,要做到自动出入当前时间戳,只要在定义表格时将字段的默认值设置为 CURRENT_TIMESTAMP 即可. 如: create table if not exists my_tab ...

  10. 微信小程序之网络通信

    关于网络通信,这里我使用的是wx.request,官方代码示例如下: wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: ...