asp.net core 發布到 docker 容器時文件體積過大及服務端口的配置疑問
在 asp.net core 發布時,本人先後產生了3個疑問。
1、發布的程序為什麽不能在docker容器中運行
當時在window開發環境中發布後,dotnet xxx.dll可以正常運行;但放入docker容器後就報 *.*.deps.json not found 的錯誤。後根據下面的文章解決了問題:https://www.cnblogs.com/mahidol/p/9064943.html
根據上述文章的結論,因為發布時認為運行的環境中包含必備的庫,所以僅發布了項目中的代碼與資源。
我的dockerfile用的基礎鏡像是:microsoft/dotnet:2.1.2-aspnetcore-runtime,因此asp.net core runtime是完整的,所以之前發布應該缺少linux系統上必備的文件。因此重設發布選項,如下圖:
現在發布的程序在docker容器中運行的很好?。
2、發布的文件體積問題
按照一個問題的解決思路,新建一個asp.net core項目進行發布設置,如下:
僅一個簡單示例的程序,發布出來就有90M。有點太恐怖了??,這次發布的程序應該能夠直接在沒有asp.net runtime的linux機器上運行(本人沒有測試)。
3、程序端口配置
程序運行在linux或docker容器中,需要我們有明確的端口。當初asp.net core 默認5000的端口,我在容器中測試為監聽80端口。根據網上的資料,修改端口配置發現無效,修改步驟如下(哪位朋友修改成功了,請告訴我一下,謝謝):
新建hosting.json
{ "server.urls": "http://localhost:9000;" }
修改Program.cs
public class Program { public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .Build(); BuildWebHost(args, config).Run(); } public static IWebHost BuildWebHost(string[] args, IConfigurationRoot config) => WebHost.CreateDefaultBuilder(args) .UseConfiguration(config) .UseStartup<Startup>() .Build(); }
最後嚴重吐槽2下MS
1、Controller中有如下代碼:
public class TestController : Controller { public IActionResult Home() { ViewBag.Px = new { Name = "123", Age = 20 }; return View(); } }
view代碼如下:
@{
ViewData["Title"] ="Home Page";
}
@ViewBag.Px.Name
直接出錯:
2、View中輸出中文
Controller中有如下代碼:
public class TestController : Controller
{
public IActionResult Home()
{
ViewBag.Txt = "abc";//"你好";
return View();
}
}
view代碼如下:
@{ ViewData["Title"] ="Home Page"; } <script> var x = "@ViewBag.Txt"; alert(x); </script>
"abc"與"你好"輸出的結果:
asp.net core 發布到 docker 容器時文件體積過大及服務端口的配置疑問