在Kestrel上运行的ASP.NET Core应用在容器内可以正常运行,但从容器外部访问时,会出现“对端重置了连接”的错误

前端开发 2026-07-09

ContainerFile 这张镜像是由以下内容构建的:

FROM ubuntu:26.04
EXPOSE 5000

RUN apt-get update
RUN apt-get install -y aspnetcore-runtime-10.0
RUN apt-get install -y curl

# Directory where www data is installed
VOLUME /www

ENTRYPOINT ["/usr/bin/dotnet"]

用于从镜像创建容器的命令:

podman container create --name dotnet_st --volume html:/www --publish 15010:5000 --entrypoint '["/usr/bin/dotnet","ST.CMS.WebApp.dll"]' --env ASPNETCORE_ENVIRONMENT=LinuxTest --workdir /www/st dotnet

在容器内的命令提示符下,这会返回该页面的HTML代码,且一切正常。

curl localhost:5000

然而在主机上(容器外):

curl localhost:15010

返回:

curl: (56) 接收失败:对等方重置了连接

日志中没有与此次失败请求相关的容器日志条目。

解决方案

默认情况下,ASP.NET仅监听本地主机。当你在容器内运行时,你通过一个本地端口(15010)连接到ASP.NET服务器,Docker会将该端口转发到容器中的端口(5000)。在容器内,请求看起来像来自另一个网络,因此安全层会拒绝它们并关闭连接。

你需要修改 Properties/launchSettings.json 使得:

"applicationUrl": "http://localhost:5000"

变为

"applicationUrl": "http://0.0.0.0:5000"
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章