ASP.Net Core 容器在自定义端口 8080 上运行,但 ASP.Net 容器在 Docker Windows 中在固定端口 80 上运行

问题描述 投票:0回答:1

我根据以下图片制作了两个容器:

ASP.Net 核心

mcr.microsoft.com/dotnet/aspnet:8.0.0-windowsservercore-ltsc2019

ASP.Net

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虚拟适配器。

即使我使用

EXPOSE 9090
构建该图像,其行为仍然相同。

简而言之,ASP.Net Core 容器是双向工作的:

http://localhost:8080

http://172.20.235.46:8080

但是 ASP.Net 容器只能通过以下方式访问:

http://172.20.235.45/

为什么会有这样的表现?是因为它的基础镜像是微软构建的吗?

asp.net windows docker asp.net-core
1个回答
0
投票

来自

EXPOSE
文档:

EXPOSE
指令实际上并不发布端口。它充当构建镜像的人和运行容器的人之间的一种文档,关于要发布哪些端口。

因此指定

EXPOSE 9090
不会更改 ASP.NET 正在侦听的端口。

您可以自由地将“内部”端口映射到任何外部端口,因此最简单的选择是将容器的默认

80
映射到
9090
:

docker run -d -p 80:9090 asp
© www.soinside.com 2019 - 2024. All rights reserved.