我想做一个我的ASP.NET Web API的图像,我将在Docker中使用不同的端口运行,在启动时保存到数据库中的一个条目,其中包含IP和访问它的端口。
然后在我的Back Office Web API中,从数据库获取一个这样的记录,例如,我可以使用我编写的提供程序来访问相同的ASP.NET Web API,使用其IP和端口。
现在,当我启动Web API时,我在数据库中获得以下条目:
ip: 26.16.80.29
port: 53256
字符串
虽然我的Web API正在侦听:
Microsoft.Hosting.Lifetime:信息:正在收听:https://localhost:5001
Microsoft.Hosting.Lifetime:信息:正在收听:http://localhost:5000
现在我使用以下方法来获取我在互联网上找到的IP和端口:
// Getting IP
IPAddress[] ipAddresses = Dns.GetHostAddresses(Dns.GetHostName());
IPAddress ip = ipAddresses.Select(ip => ip)
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
.First();
// Getting port
var listener = new TcpListener(IPAddress.Any, 0);
listener.Start();
var port = ((IPEndPoint)listener.LocalEndpoint).Port;
listener.Stop();
型
我也有一个想法,从launchSettings.json
获取这些信息:
"profiles": {
"Docker": {
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}"
}
}
型
但是如果我突然不想在容器中使用启动,而是想使用任何其他配置文件,一切都应该以同样的方式工作
有什么办法可以解决这个问题?
1条答案
按热度按时间ubof19bj1#
我不知道这是否能在Docker镜像中工作,可能在NAT /负载均衡器/等等之后,但我确实在之前成功地使用过它:
字符串
它在“大部分”时间都能工作:-)但是,在生产环境中,我确实从配置文件中获取了“外部”IP地址,只是为了确保,只有在配置丢失的情况下才采取这种“黑客”手段。