上一篇我示範在Linux container存取本身的http server,
這篇示範如何透過windows host的外部程式來存取Linux container的http server。
一般我們都會希望可以透過file來設定http server,所以我新增了hosting.json
{
"urls": "http://*:8888"
}
Program.cs 修改如下
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddJsonFile("hosting.json", optional: false)
.Build();
BuildWebHost(args, config).Run();
}
public static IWebHost BuildWebHost(string[] args, IConfigurationRoot configuration) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(configuration)//override from hosting.json file
.UseStartup<Startup>()
.Build();
}
複製檔案至container後,啟動http server
docker run --name NancyServer -p 8888:8888 -p 1533:1433 mylinux04
docker exec -it 8e0654a23116 "bash"
Dotnet WebAPIwithNancy.dll
可以看到正常listening on http://*:8888,之前而我在windows host透過telnet 127.0.0.1 8888 確認沒問題,
但用chrome和postman均失敗,後來重新檢查windows host network、docker network和hyperV netwrok才搞定。
因為Linux container預設採用bridge,所以我們要改存取Linux container的IP和port
Ps:開發環境我都會安裝net-tools和iputils,但正式環境請最小化image為主,因為畢竟不是用拿來debug。
apt-get install net-tools –y、apt-get install iputils-ping -y
如果沒有安裝net-tools,可以使用docker inspect <container id>來確認container ip
下圖是我個人Win10的docker for windows和hyperV網路設定
確認route table存在172.17.0.0網段沒問題後,現在不管我輸入127.0.0.1或container ip都能正常存取Linux container裡的http server
Http Server的debug console也會呈現相關存取IP
參考