.NET 8 API部署Docker遇Error: read ECONNRESET问题求助
.NET 8 API Docker部署出现ECONNRESET错误的解决方案
问题背景
使用.NET 8开发的API,本地通过Kestrel运行时正常访问,通过Rider+Docker Compose部署后,调用API出现如下错误:
Error: read ECONNRESET
API可正常连接Postgres容器,EF迁移能正常执行,宿主机也能通过localhost:5432连接Postgres,但容器内API无法被宿主机访问。
核心原因
Kestrel默认绑定了容器内部的localhost回环地址,仅允许容器内部访问,宿主机通过端口映射无法连接到服务。
修复步骤
1. 修改appsettings.json的监听地址
将配置中的urls从http://localhost:5068改为http://+:5068,让Kestrel监听容器内所有网络接口:
{ "ConnectionStrings": { "SweetNotes": "Server=sweetnotes.db;Port=5432;Database=SweetNotes;User Id=[USER];Password=[PASSWORD];" }, "urls": "http://+:5068", "Kestrel": { "EndpointDefaults": { "Protocols": "Http1AndHttp2" } }, "CorsSettings": { "FrontendOrigin": "http://localhost:3050" } }
2. 确保Docker环境变量覆盖配置
原docker-compose.yml已设置ASPNETCORE_URLS=http://+:5068,但Rider自动生成的override配置可能未继承该变量,需手动添加:
services: sweetnotes.api: # 保留原有配置 environment: # 原有环境变量 DOTNET_USE_POLLING_FILE_WATCHER: "true" RIDER_DEBUGGER_LOG_DIR: "/var/opt/rider-debugger" RESHARPER_LOG_CONF: "/etc/opt/rider-debugger/backend-log.xml" # 添加以下行确保地址配置生效 - ASPNETCORE_URLS=http://+:5068
3. 验证容器内监听状态
进入API容器,检查端口监听情况:
# 进入容器 docker exec -it SweetNotes.Api bash # 安装网络工具(若容器未预装) apt-get update && apt-get install -y net-tools # 检查5068端口监听 netstat -tulpn | grep 5068
确认输出显示0.0.0.0:5068(监听所有接口),而非127.0.0.1:5068(仅本地回环)。
4. 重启容器测试
执行命令重建并重启容器:
docker-compose down && docker-compose up --build -d
访问http://localhost:5068验证API是否正常响应。
内容的提问来源于stack exchange,提问作者esausilva
相关产品推荐
相关产品推荐

