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的原因,但是在未更改資料庫
參考方案:
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.未找到原部落格的引用地址,後續若有找到則新增