我有一个针对.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在容器内运行时有什么问题吗?