十年河東,十年河西,莫欺少年窮
學無止境,精益求精
搞了快一天了,終於成功部署了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下載鏡像啥的。
這樣就
大功告成了
@天才卧龍的波爾克