asp.net core 發佈到 docker 容器時文件體積過大及服務端口的配置疑問

在 asp.net core 發佈時,本人前後產生了3個疑問。html

一、發佈的程序爲何不能在docker容器中運行linux

當時在window開發環境中發佈後,dotnet xxx.dll能夠正常運行;但放入docker容器後就報 *.*.deps.json not found 的錯誤。後根據下面的文章解決了問題:https://www.cnblogs.com/mahidol/p/9064943.htmldocker

根據上述文章的結論,由於發佈時認爲運行的環境中包含必備的庫,因此僅發佈了項目中的代碼與資源。json

個人dockerfile用的基礎鏡像是:microsoft/dotnet:2.1.2-aspnetcore-runtime,所以asp.net core runtime是完整的,因此以前發佈應該缺乏linux系統上必備的文件。所以重設發佈選項,以下圖:asp.net

如今發佈的程序在docker容器中運行的很好✌。測試

二、發佈的文件體積問題ui

按照一個問題的解決思路,新建一個asp.net core項目進行發佈設置,以下:url

 

僅一個簡單示例的程序,發佈出來就有90M。有點太恐怖了😱,此次發佈的程序應該可以直接在沒有asp.net runtime的linux機器上運行(本人沒有測試)。spa

三、程序端口配置.net

程序運行在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

一、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

直接出錯:

二、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"與"你好"輸出的結果:

相關文章
相關標籤/搜索