You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器HTTP请求异常:宿主机请求出现socket hang up问题

问题原因与解决方案

问题根源

你的ASP.NET Core应用在容器内仅监听localhost:5000,这意味着应用只会响应容器内部回环地址的请求,不会监听容器的外部网络接口。Docker的端口映射是将宿主机端口转发到容器的外部可访问接口,因此宿主机的请求无法被容器内的应用接收,导致出现Error: socket hang up错误。而容器内部访问localhost:5000能正常工作,是因为直接命中了应用绑定的回环地址。

解决方法

你需要让应用监听容器的所有网络接口(0.0.0.0),有以下几种实现方式:

  • 代码层面修改:
    在Program.cs中配置监听地址:
    .NET 5及更早版本:
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseUrls("http://0.0.0.0:5000");
                webBuilder.UseStartup<Startup>();
            });
    
    .NET 6+版本:
    var builder = WebApplication.CreateBuilder(args);
    builder.WebHost.UseUrls("http://0.0.0.0:5000");
    // 其他配置代码...
    var app = builder.Build();
    
  • 环境变量配置:
    启动容器时添加环境变量参数:
    docker run -d -p 6000:5000 -e ASPNETCORE_URLS="http://0.0.0.0:5000" webapi
    
  • 配置文件修改:
    在appsettings.json中添加配置项:
    {
      "ASPNETCORE_URLS": "http://0.0.0.0:5000"
    }
    

验证

修改完成后,重新构建镜像或重启容器,在宿主机通过Postman访问http://localhost:6000/api/Users即可正常获取用户列表。

内容的提问来源于stack exchange,提问作者Valerons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:19:56