最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在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. 关于AndroidStudio项目app在手机上运行遇到登录网络问题的解决

    又得提到我熟悉的12月份末尾,依旧想着把自己遇到的问题给大家看看,顺便分享我的解决办法. 看过我第一个发的随笔就知道,我遇到过给项目app打包成apk的问题啊,虽然解决了,但是运行到手机上 就又出现了 ...

  2. python无法导入自己的模块的解决办法

  3. tensorflow2.0 学习(二)

    线性回归问题 # encoding: utf-8 import numpy as np import matplotlib.pyplot as plt data = [] for i in range ...

  4. [RN] React Native 使用 FlatList 实现九宫格布局 GridList

    React Native 使用 FlatList 实现九宫格布局 先看图片演示实例: 本文以图片列表为例,实现九宫格布局! 主要有两种方法: 1)方法一: 利用FlatList的 numColumns ...

  5. 【后缀数组】【LuoguP4248】 [AHOI2013]差异

    题目链接 题目描述 给定一个长度为 n 的字符串 S,令 Ti 表示它从第 i 个字符开始的后缀.求 \(\sum_{1\le i <j\le n}len(T_i)+len(T_j)-2*lcp ...

  6. Error:gradle-resources-test:thymeleaf-in-action.main: java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream

    目录 Error:gradle-resources-test:thymeleaf-in-action.main: java.lang.NoClassDefFoundError: org/apache/ ...

  7. mysql 分组和排序

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

  8. 将对象转化为数组,并且适用select下拉

    当你做element-ui的select下拉的时候数据是从后台请求,但是怎么才能将obj转成数组呢.并且后台返回的key和value中的key是要传的参数 var obj = { name: 'gab ...

  9. vim 注释颜色

    方法一 修改 vim 配置文件 /etc/vim/vimrc (1)用vim打开 /etc/vim/vimrc文件 (2)按大写 ‘G’ 到最后一行,插入   hi comment ctermfg=6 ...

  10. 【2019.12.11】SDN上机第7次作业

    打开P4的目录,运行主程序 make run 此时输入命令 pingall 会显示所有的网络不通 改为下方代码 /* -*- P4_16 -*- */ #include <core.p4> ...