在Kestrel上运行的ASP.NET Core应用在容器内可以正常运行,但从容器外部访问时,会出现“对端重置了连接”的错误
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。