docker中的aspnetcore:windows和linux容器的不同行为
我使用最后的Docker
和MSVS 2017
在Windows 10 Professional
上工作。 我使用默认模板创build了简单的web api应用程序,并仅更改了BuildWebHost
方法:
public static IWebHost BuildWebHost(string[] args) => new WebHostBuilder() .UseKestrel() .UseStartup<Startup>() .Build();
然后发表它:
dotnet publish -c Release
然后我设置位置在PowerShell中发布文件夹,并运行docker图像(目前在Windows模式下的docker):
docker run --rm -it -v ${PWD}:C:/api -p 6722:80 microsoft/aspnetcore:2
在容器cmd中
cd api dotnet mywebapi.dll
结果: http://localhost:6722/api/values
不起作用, http://172.30.163.123/api/values
http://localhost:6722/api/values
起作用。
然后我打开docker linux模式并运行这个模式:
docker run --rm -it -v ${PWD}:/api -p 6722:80 microsoft/aspnetcore:2
在容器bash中:
cd api dotnet mywebapi.dll
结果: http://localhost:6722/api/values
有效, http://172.17.0.2/api/values
http://localhost:6722/api/values
不起作用。
我使用docker inspect
来获取容器的ip地址。
为什么在Windows容器的情况下WebAPI只能在容器的IP地址? 为什么在Linux容器的情况下,webapi只能在localhost +端口上使用?
UPD_1:我看到有一个问题的Windows容器https://github.com/docker/for-win/issues/458
- .Net – 将日志从Web应用程序推送到运行Fluentd的Docker容器
- 单声道TLS1.2问题 – btls-cert-sync“命令未find”
- 在ASP.NET Core中构builddocker:“没有这样的文件或目录”错误
- 添加应用程序参数以在Docker中运行.NET控制台应用程序
- 运行Windows应用程序的Docker
- 与docker的dotnet核心2
- 与Docker的Asp.Net核心 – 包括重复的“内容”项目
- 将.NET Core控制台应用程序构build到Docker中
- 使用Windows身份validation将在Linux容器中运行的.NET API与在VM中运行的SQL Server连接起来