1. 程式人生 > 實用技巧 >aspnetcore3.1通過dockerfile釋出到docker遇到的坑

aspnetcore3.1通過dockerfile釋出到docker遇到的坑

內在影響

  環境:window 10,docker2.3.0.2,vs 2019

  外部資源:mssql(2016),reides

  釋出內容:web api (http:若建立時點選了支援https也沒有關係,不影響釋出http)

正常步驟:

1.右鍵點選專案->新增->支援docker

2.修改Dockerfile

3.釋出docker成功

非正常步驟:

1.映象無法下載,修改dockerfile的映象(使用阿里映象)

mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim ->registry.cn-chengdu.aliyuncs.com/jimlicatpub/aspnet:3.1-buster-slim

mcr.microsoft.com/dotnet/core/sdk:3.1-buster ->registry.cn-chengdu.aliyuncs.com/jimlicatpub/dotnet-sdk:3.1-buste

2.無法連線資料庫

  錯誤資訊:SSL Handshake failed with OpenSSL error

  解決方案:修改dockerfile檔案 -> 新增RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf (ps:也有說新增 RUN sed -i "s|DEFAULT@SECLEVEL=2|DEFAULT@SECLEVEL=1|g" /etc/ssl/openssl.cnf ,未測試)

  參考方案:

    1.https://blog.csdn.net/qq_21265915/article/details/103274624

    2.https://www.cnblogs.com/jidanfan/p/12158972.html

  ps:由於找不到原答案,所以找了兩個相近的連結補上

3.資料庫連線超時
  錯誤資訊:Connection Timeout Expired

解決方案:檢視資料庫版本->sql server 2008 sp3(ps:只測試了sql server 2016、2014)(ps:也有說資料庫連線超時是因為 mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim的原因,但是在未更改資料庫

為 sql server 2016時,也是無效的;後續改為sql server 2016後可以,如果高版本資料庫不行,則可以考慮更改 為mcr.microsoft.com/dotnet/core/aspnet:3.1 試試)

  參考方案:

    1.未找到原文地址,所以給一個相近的地址:https://my.oschina.net/lichaoqiang/blog/1793006

    2.測試無效,但是感覺有道理的方案:https://q.cnblogs.com/q/DetailPage/127069/

4.aspnetcore 3.1在Linux下,使用圖片等操作導致系統錯誤

  錯誤資訊:The type initializer for 'Gdip' threw an exception

  解決方案:

RUN echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free \
deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free \
deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free \
deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free \
deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free \
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free \
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib \
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" > /etc/apt/sources.list
 
RUN apt-get update && apt-get install libgdiplus -y && ln -s libgdiplus.so gdiplus.dll

ps:

1.映象可能會遇到生成出錯,注意命令新增位置,我是放到dockerfile末尾;

2.打包成功但是無法執行,還是報同樣的錯誤,將命令放到檔案最後,我開始放到中間出現此問題,放到檔案末尾則無此問題;

3.映象可能在window的打包環境可以執行,但是伺服器會報"來自守護程式的錯誤響應:未指定命令",我的解決方案是刪除本地docker庫中打包程式的歷史映象,重新打包就好了

 4.個人認為有效的是“RUN apt-get update && apt-get install libgdiplus -y”,奈何只加這一句打包會出問題,未找到原因,新增映象是為了快速拉取

 5.未找到原部落格的引用地址,後續若有找到則新增