我根据以下图像制作了两个容器:
ASP.NET 核心
mcr.microsoft.com/dotnet/aspnet:8.0.0-windowsservercore-ltsc2019
网络平台
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2016
我按如下方式运行两个容器:
docker run -d -p 8080:8080 aspcore
docker run -d -p 9090:9090 asp
ASP.NET Core 容器在端口 8080 上运行,我可以在浏览器中打开它http://localhost:8080
,但 ASP.NET 容器无法运行http://localhost:9090
docker ps -a
显示 ASP.NET core 正在运行,0.0.0.0:8080->8080/tcp
而 ASP.NET 正在运行80/tcp, 0.0.0.0:9090->9090/tcp
这意味着 ASP.NET 只能通过端口 80 上的某个 IP 访问,例如http://172.20.235.45/
. 该IP是Hyper-V虚拟适配器的IP。
即使我用 构建该图像EXPOSE 9090
,它的行为仍然是相同的。
简而言之,ASP.NET Core 容器有两种工作方式:
http://localhost:8080
http://172.20.235.46:8080
但 ASP.NET 容器只能通过以下方式访问:
http://172.20.235.45/
为什么它会这样?是因为微软的基础镜像是如何构建的吗?