===============================================
2020/9/21_第1次修改 ccb_warlock
===============================================
之前asp.net core項目都是跑在IIS上的,最近有空在測試docker時發現在IDE調試和IIS里正常跑的項目,在部署到docker后報了“Internal connection fatal error.”。
加日志排查后,定位問題點在EF Core獲取數據時報了這個錯。
項 | 配置 |
基礎鏡像 | mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine |
ORM | Entity Framework Core 2.2 |
目標數據庫 | MSSql |
這里取一段報錯的代碼來描述問題點,報錯就出現在框架封裝的Get方法上(因為這個API最早操作數據庫的就是獲取數據)
private static DbSet<T> Set {get; set;} public T Get(string id) { return Set.AsNoTracking().FirstOrDefault(s => s.Id == id); }
解決方案:
在使用官方asp.net core的alpine鏡像時,加個包(icu-libs)並設置1個環境變量就可以解決。(icu-libs不用梯子安裝要點時間)
RUN apk add --no-cache icu-libs ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
PS.后面我也進行了其他測試,使用微軟官方非alpine鏡像(mcr.microsoft.com/dotnet/core/aspnet:2.2)倒是沒有這個問題,而非alpine鏡像只大了100MB。
結論:
所以目前階段為了少點事,還是先用官方非alpine鏡像來構建asp.net core項目吧。
參考資料:
1.https://github.com/dotnet/SqlClient/issues/81#issuecomment-399375323