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"与"你好"输出的结果:
作者:DW039
出处:http://www.cnblogs.com/dw039
本文由DW039原创并发布于博客园,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。