• netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案


    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

     搞了快一天了,终于成功部署了netcore项目到docker 

    按照上篇博客的发布方法进行发布,上篇博客:netcore3.1 dockerfile 生成镜像 并 部署到 linux 系统 

    1、发布之前,需要说明的是,将项目Dockerfile 、Swagger 文档XML文件属性统统设置为:始终复制

    2、编写项目Dockerfile 文件为如下,这一步最重要,否则,你会遇到各种奇葩的问题,我的Dockerfile如下:

    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
    FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
    #ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)
    #这里是配置程序运行端口 如果程序不使用默认的80端口这里一定要设置(程序运行端口)
    ENV ASPNETCORE_URLS http://+:80
    #设置时间为中国上海
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    COPY . /app
    WORKDIR /app
    EXPOSE 80
    ENTRYPOINT ["dotnet", "WuAnFundApi.dll"]

    这里需要说明的是:

    前两个 FROM 不能少,是运行环境及依赖

    容器运行时间采用上海,因为默认为美国时间

    COPY .  /app 第一个 . 代表发布的文件所在的 Linux 系统的目录,第二个 /app 是要复制到的目录,这里 /app 必须和 WORKDIR 的 /app 保持一致

    EXPOSE 80 ,代表暴露80端口,因为没有暴露 443 端口,我们需要将netcore 代码 startUp.cs  中的这段注释掉,声明不使用 HTTPS

                //app.UseHttpsRedirection();

    如果要使用HTTPS协议,需要SSL证书,如果你有ssl证书,可以这样增加一个443端口

    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
    FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
    #ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)
    #这里是配置程序运行端口 如果程序不使用默认的80端口这里一定要设置(程序运行端口)
    ENV ASPNETCORE_URLS http://+:80
    #设置时间为中国上海
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    COPY . /app
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    ENTRYPOINT ["dotnet", "WuAnFundApi.dll"]

    更详细信息可参考https://www.cnblogs.com/yiting/p/13388155.html  或   http://t.zoukankan.com/shapman-p-13545457.html

    3、将发布的文件放入linux系统,我这里采用的SCP命令,关于SCP命令,大家可参考鄙人博客:windows 下使用SCP命令传递文件/文件夹到Liunx系统

     4、发布文件放入Linux系统后,cd 到该目录下,执行Build命令,构建镜像

    [root@localhost webapp]# docker build -f Dockerfile  -t webapp:1.0 .

    /5、构建成功后,运行镜像到容器

     docker run -it --name webapp01 --restart=always -p 8088:80  -v /root/share/webapp:/app  d3abddc5e300 /bin/bash

    如果你使用443端口,可以这样声明:

    docker run -it --name webapp01  --restart=always -p 80:80  -p 443:443  -v /root/share/webapp:/app d3abddc5e300 /bin/bash

    这里做个简单说明:

    -it  已交互模式进入容器

    --restart=always  容器会随着docker的启动而自动启用,这样就无需再手动开启

    -v 是挂载  

     在这里,我们发现容器还有部分错误,表现为:log4net相关配置有问题, 如下

     上图中也包含了查看容器日志的命令,通过日志信息,我们同样发现Log4Net确实有错误,解决了Log4Net的错误后,不知道是否还会有其他幺蛾子错误,但程序就是这样,发现问题,解决问题,待所有问题解决后,我们就可以通过 curl 命令,访问我们的swageer了

    curl localhost:8088/WuAnFundApi/swagger/index.html

    今日先到这儿,回家做核酸了,妈的,天天做核酸,坐标苏州。

    继续

    log4net 似乎对linux的支持不太好,因此,我在项目中去掉log4net,重新打包镜像,运行容器后,就成功了

    linux请求swagger 如下:

     浏览器中请求:

     在swagger的展示过程中,由于鄙人将URL地址输成了:http://192.168.136.135:8088/WuanFundApi/Swagger/index.html  导致陷入了钻牛角,百度查不到,就去必应,必应国内版查不到,又去了必应国际版,总之各种查资料,后来发现是自己的URL拼错了,正确的为:http://192.168.136.135:8088/swagger/index.html ,总之,不需要单独为swagger下载镜像啥的。

    这样就

      大功告成了

    @天才卧龙的波尔克

  • 相关阅读:
    JS 对象定义
    JavaScript HTML DOM 元素(节点)
    DOM 事件
    DOM CSS
    DOM HTML
    DOM 简介
    JS 验证
    JS 错误
    JavaScript Break 和 Continue 语句
    JS While
  • 原文地址:https://www.cnblogs.com/chenwolong/p/dockererror.html
Copyright © 2020-2023  润新知