无法在Docker容器中启动Kestrel

时间:2018-05-09 08:39:18

标签: docker asp.net-core

我有一个针对.NETCore 2.0编写的应用程序。我可以在我的CentOS 7盒子上用bash运行应用程序,没有任何问题。

我成功生成了一个dockerfile并构建了一个docker镜像。

当我使用B将图像作为容器启动时,我得到以下异常:

docker run

不知道地址不可用的含义!该地址未在我的子网中使用,也不是配置的端口。在C#中,我使用以下代码配置Kestrel:

在我的主要()

2018-05-09 08:18:02.038 +00:00 [FTL] [Microsoft.AspNetCore.Server.Kestrel] [ThreadId 4] Unable to start Kestrel.
Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.UvException: Error -99 EADDRNOTAVAIL address not available
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.ThrowError(Int32 statusCode)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.UvTcpHandle.Bind(IPEndPoint endPoint)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.ListenTcp(Boolean useFileHandle)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.<>c.<StartAsync>b__8_0(Listener listener)
   at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvThread.DoPostWork()

var wHost = BuildWebHost(args[1]); wHost.Run(); 方法定义为:

BuildWebHost()

IP地址作为参数传递, private static IWebHost BuildWebHost(string hostAddress) { return new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseSerilog() .ConfigureAppConfiguration((builderContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); }) .UseDefaultServiceProvider((context, options) => { options.ValidateScopes = context.HostingEnvironment.IsDevelopment(); }) .UseStartup<Startup>() .UseUrls($"http://{hostAddress}:{ServerPort}") .Build(); } 是常量。在Docker文件中我有

ServerPort

在启动Kestrel之前,该服务会进行大量初始化,例如从Redis数据库加载配置并初始化MongoDB服务器上的内容。这些服务器在同一子网中的不同计算机上运行,​​这只是工作正常。所以我猜我的容器中的网络工作正常。

知道Kestrel在容器内运行时有什么问题吗?

0 个答案:

没有答案